用c#,regex隐藏一些字符的电子邮件地址

时间:2011-02-24 16:16:02

标签: c# regex security email

我想用* char。

替换一些电子邮件地址的字符

当客户提出请求时,我想隐藏一些电子邮件地址的字符,如下所示;

ha~~~~@~~~~ail.com

我想这样做。我希望在@之前显示前两个字符,在@

之后显示最后三个字符

但还有其他常见的做法吗?

4 个答案:

答案 0 :(得分:10)

与其他回复类似,但也有所不同。也接受.co.uk地址。

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public class Test
{
        public static void Main()
        {
                String regex = @"(.{2}).+@.+(.{2}(?:\..{2,3}){1,2})";
                String replace = "$1*@*$2";
                List<String> tests = new List<String>(new String[]{
                        "joe@example.com",
                        "jim@bob.com",
                        "susie.snowflake@heretoday.co.uk",
                        "j@b.us",
                        "bc@nh.us"
                });
                tests.ForEach(email =>
                {
                        Console.WriteLine(Regex.Replace(email, regex, replace));
                });
        }
}

结果:

jo*@*le.com
ji*@*ob.com
su*@*co.uk
j@b.us
bc@nh.us

虽然我不是100%确定你想要用两边只有2个字母的名字做什么(因此最后两个结果)。但这是我的出价。的 Example

答案 1 :(得分:3)

因为你的规则非常简单,所以可以更容易地使用substring来获取@之前和之后的字符,然后替换它们。

的内容
            int index = email.IndexOf('@');                
            string returnValue = email.Replace(email.Substring(index - 3, 3), "***").Replace(email.Substring(index+1,3), "***");

虽然您需要首先验证电子邮件地址在@之前是否包含足够的字符并进行相应更改。

答案 2 :(得分:0)

你可以这样做:

resultString = Regex.Replace(subjectString, "([^@]{2})[^@]*@[^.]*([^.]{3}.*)$", "$1~~~@~~~$2");

如果在@之后(如在tim@me.com中)或在@之前少于2个字符少于三个字符,则会失败。在这种情况下你想要发生什么?

答案 3 :(得分:0)

public static string MaskEmailID(string EmailID)
    {
        MailAddress addr = new MailAddress(EmailID);
        string username = addr.User;
        string domain = addr.Host;
        String regex;
        if (domain.Contains(".com"))
        {
            regex = @"(.{1}).+(.{1})+@(.{1}).+(.{1}(?:\..{2,3}){1,2})";
        }
        else
        {
            regex = @"(.{1}).+(.{1})+@(.{1}).+(.{4}(?:\..{2,3}){1,2})";
        }
        string CharStr1 = new String('*', username.Length - 2);
        string CharStr2 = new String('*', (domain.IndexOf('.') - 2));
        String replace = "$1" + CharStr1 + "$2@$3" + CharStr2 + "$4";
        return Regex.Replace(EmailID, regex, replace);
    }