混淆电子邮件?

时间:2014-08-13 20:50:47

标签: regex asp.net-mvc

让我们首先说我有一个非常大的项目,该项目的一部分是获取用户恢复操作状态和用户电子邮件,并通过服务层将其发送回前端应用。问题是,电子邮件需要在后端进行更改,因此不会发送纯文本。我的意思是,当在后端填充值时,我需要有一些代码来修改它,所以它将具有这样的格式:j*****e@domain.com。这绝对需要用我正在研究的方法(实际上并不是很大)来完成。这是我的方法,它将从同一个类中的另一个方法获取状态,以及抓取用户的电子邮件:

public CredentialRecoveryResponse RecoveryResponse(CredentialRecoveryRequest request)
    {
        CredentialRecoveryResponse response = new CredentialRecoveryResponse();
        response.Status = RecoverCredentials(request);
        if (response.Status == UserRecoveryActionStatus.Success)
        {
            User usr = UserRepository.GetByID(request.UserID);
            response.Email = usr.EmailAddress;
        }

        return response;
    }

不知何故,在这个方法中,我需要把那个usr.EmailAddress和修改它做"阻止"或将值更改为" *"对于除" @ domain.com"之前的第一个和最后一个字符以外的所有字符一部分。是否有一种快速简便的方法可以在整个电子邮件地址无法通过电汇发送的方式中执行此操作?

1 个答案:

答案 0 :(得分:0)

以下是:

private static string ObfuscateEmail(string email)
{
     return Regex.Replace(email, "^(?<name>[^@]+)", m => {
          string match = m.Groups["name"].Value;
          return match[0] + new String('*', match.Length - 1);
     });
}

这是做什么的?

  1. 该方法使用Regex.Replace并传递lambda函数来进行实际替换
  2. 正则表达式模式简单地说匹配@符号左侧的所有内容,并创建一个名为&#39; name&#39;。
  3. 的命名组。
  4. 然后lambda函数获取匹配的第一个字符,并使用String方法(char,int)的重载向其附加一系列星号,该方法重复该字符N次。它是N-1,因为第一个字符是未经过混淆的。