如何在c#中屏蔽/隐藏电子邮件地址

Sar*_*han 12 c# c#-3.0 c#-2.0 c#-4.0

我有一个问题,我必须在c#中应用屏蔽/隐藏电子邮件地址的一部分.例

jhon@abc.com==> jh**n@abc.com
bigjhon@abc.com==> bi****n@abc.com
brotherhood@abc.com==>br*******od@abc.com
Run Code Online (Sandbox Code Playgroud)

我有这个代码,但它给了一些电子邮件的例外."指数数组的边界之外."

for (int i = 0; i < eml.Length; i++)
{
 int j = i == (eml.Length - 1) ? 0 : 1;
 cc = eml[i].ToString();
 if (i <= 1)
 {
  dispeml += cc;
 }
 else 
 if (eml[i + (j + k)].ToString() == "@")
 {
  dispeml += cc;
  k = 0;
  fl = 1;
 }
 else 
 if (eml[i + j].ToString() == "@")
 {
  dispeml += cc;
  fl = 1;
 }
 else 
 if (fl == 1)
 {
  dispeml += cc;
 }
 else
 {
  dispeml += "*";
 }
}
Run Code Online (Sandbox Code Playgroud)

fub*_*ubo 34

以下是使用Regex解决此问题的方法

string input = "jhon@abc.com";
string pattern = @"(?<=[\w]{1})[\w-\._\+%]*(?=[\w]{1}@)";
string result = Regex.Replace(input, pattern, m => new string('*', m.Length));
//j**n@abc.com
Run Code Online (Sandbox Code Playgroud)

说明:

(?<=[\w]{1}) 名称必须以1个单词字符开头

[\w-\._\+%]* 替换部分可以包含0-n个字符,包括 -_.+%

(?=[\w]{1}@) 名称必须以一个单词字符后跟一个单词结尾 @

根据您希望保持不变的字符数量,您可以在开头或结尾处更改{1}{2}或其他内容.

  • 我最后添加了`|(?<= @ [\ w] {1})[\ w -_\+%]*(?= \.)`到你的正则表达式的末尾来得到我想要的东西,没有'但是要处理`@ foo`. (2认同)

小智 9

如果您总是希望在@之前使用固定数量的蒙版字符屏蔽第一个字符和最后一个字符之间的任何内容,则可以使用以下内容

var email="abcdef@ghij.com";
var maskedEmail = string.Format("{0}****{1}", email[0], 
email.Substring(email.IndexOf('@')-1));
Run Code Online (Sandbox Code Playgroud)

您可以根据需要更改上述行.

以上行将为您提供结果"a****f@ghij.com"

请注意,始终使用固定数量的字符屏蔽电子邮件将使得难以猜测电子邮件并且稍微更安全.

例如:ab@c.com

面具后:a****b@c.com