我想用* char。
替换一些电子邮件地址的字符当客户提出请求时,我想隐藏一些电子邮件地址的字符,如下所示;
ha~~~~@~~~~ail.com
我想这样做。我希望在@之前显示前两个字符,在@
之后显示最后三个字符但还有其他常见的做法吗?
答案 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);
}