我正在尝试验证电子邮件字符串,似乎我在C#中使用的所有公共选项都不起作用一个例子,使用http://www.regular-expressions.info/email.html中的正则表达式,我创建了一个模型具有以下属性:
[RegularExpression(@"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b", ErrorMessage = "Please enter a valid email address.")]
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "The Email address where we can reach you:")]
public string Email { get; set; }
由于某些原因,它总是会抛出错误,即使它只是来自该网站的直接副本。我在正则表达式前面有@参数,但是为了让它在C#中运行,我还需要考虑其他因素吗?
答案 0 :(得分:4)
您还需要允许使用小写字母。每次有A-Z
时,您都可以将其更改为A-Za-z
。
另请注意,此正则表达式会拒绝某些有效的电子邮件地址,如网站上所述。例如,它拒绝.museum
top-level domain中的电子邮件地址,仅举一个例子。
答案 1 :(得分:0)
在您已提供的链接中引用:
http://www.regular-expressions.info/email.html
应该根据任何RFC2822电子邮件地址验证的正则表达式是:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
请注意,此正则表达式将允许不存在的顶级域名,但除非您想要跟上新顶级域名,我建议您继续使用此正则表达式。