我已经看到了许多用于不同编程语言的正则表达式,它们都旨在验证电子邮件地址。我看过很多评论说有问题的表达对某些情况不起作用,而且它们要么太严格要么太宽容。我正在寻找的是一个正则表达式,我可以在我的C#代码中使用它是明确的。
我发现的最好的事情就是这个
^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$
还有更好的东西吗?
答案 0 :(得分:134)
电子邮件地址: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])?
用法:
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);
答案 1 :(得分:19)
第一个选项(由于抛出捕获而导致错误,但MS会为您工作):
bool IsValidEmail(string email)
{
try {
var mail = new System.Net.Mail.MailAddress(email);
return true;
}
catch {
return false;
}
}
第二个选项为I Knew How To Validate An Email Address Until I Read The RFC和RFC specification
答案 2 :(得分: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);
}
答案 3 :(得分:0)
电子邮件验证正则表达式
<强> ^ [A-Z0-9] [ - 一个-Z0-9 ._] + @([ - 一个-Z0-9] +)+ [AZ] {2,5-} $ 强>
或者
<强> ^ [A-Z0-9] [ - 一个-Z0-9 ._] + @([ - 一个-Z0-9] [。] +)+ [AZ] {2,5-} $ 强>
演示链接:
答案 4 :(得分:0)
更新了2019年的答案。
Regex对象对于匹配功能是线程安全的。知道这一点并且存在一些性能选择或文化/语言问题,我提出了这种简单的解决方案。
DECLARE @parameters nvarchar(2048) = 'variable1: value1; variable2: value2; variable3: value3'
DECLARE @var1 nvarchar(32)
DECLARE @var2 nvarchar(32)
DECLARE @var3 nvarchar(32)
-- Something here to split @parameters
SELECT @var1, @var2, @var3
正则表达式的替代配置:
public static Regex _regex = new Regex(
@"^([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})(\]?)$",
RegexOptions.CultureInvariant | RegexOptions.Singleline);
public static bool IsValidEmailFormat(string emailInput)
{
return _regex.IsMatch(emailInput);
}
我发现编译仅在大字符串匹配时才更快,例如书籍解析。只需让正则表达式进行解释,简单的电子邮件匹配就会更快。
答案 5 :(得分:0)
我想建议new EmailAddressAttribute().IsValid(emailTxt)
在使用RegEx验证之前/之后进行其他验证
记住EmailAddressAttribute
是System.ComponentModel.DataAnnotations namespace
的一部分。