C#中电子邮件验证的最佳正则表达式

Sac*_*nth 35 c# regex email-validation

我已经看到了许多用于不同编程语言的正则表达式,它们都旨在验证电子邮件地址.我看过很多评论说有问题的表达对某些情况不起作用,而且它们要么太严格要么太宽容.我正在寻找的是一个正则表达式,我可以在我的C#代码中使用它是确定的.

我发现的最好的事情就是这个

^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$
Run Code Online (Sandbox Code Playgroud)

还有更好的东西吗?

PaR*_*RaJ 140

电子邮件地址:RFC 2822格式
匹配普通电子邮件地址.不检查顶级域名.
要求"不区分大小写"选项为ON.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
Run Code Online (Sandbox Code Playgroud)

用法:

bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

  • MSDN指的是这个.它的核心工作原理是`https://msdn.microsoft.com/en-us/library/01escwtf(v = vs.110).aspx` (5认同)
  • @connexo - 不,它不匹配这样的德国人物. (3认同)
  • 这是否允许本地部分使用UTF-8字符(例如德语变音符号,如Ä,ü,ö或ß)? (2认同)
  • 亚历山大上面的链接因某些原因对我不起作用.[这是一个直接链接.](https://msdn.microsoft.com/en-us/library/01escwtf.aspx) (2认同)

Pio*_*app 21

第一个选项(因为抛出捕获而不好,但MS会为你工作):

bool IsValidEmail(string email)
{
    try {
        var mail = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

读取第二个选项我知道如何验证电子邮件地址,直到我阅读RFCRFC规范

  • -1`System.Net.Mail.MailAddress`批准太多地址组合,这些组合在现实中会失败,并且根据RFC规范也是错误的,例如`unescaped white space @ fake $ com`. (9认同)
  • 如果这里的目的是发送带有`System.Net`的邮件,那么这个验证就足够了 (3认同)

Oba*_*ama 12

此C#函数使用正则表达式来评估传递的电子邮件地址是否在语法上有效.

public static bool isValidEmail(string inputEmail)
{
   string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
         @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
         @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
   Regex re = new Regex(strRegex);
   if (re.IsMatch(inputEmail))
    return (true);
   else
    return (false);
}
Run Code Online (Sandbox Code Playgroud)

  • @ParthTrivedi somename@gmail.com.in.in.in.in.in在技术上是一个有效的电子邮件地址. (28认同)