2

我正在尝试验证电子邮件字符串,似乎我在 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# 中进行这项工作,我还需要考虑其他因素吗?

4

2 回答 2

4

您还需要允许小写字母。每次你有A-Z你都可以把它改成A-Za-z.

另请注意,此正则表达式拒绝某些有效的电子邮件地址,如网站上所述。例如,它拒绝来自.museum顶级域的电子邮件地址,仅举一个例子。

于 2012-06-03T21:23:29.567 回答
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])+)\])

请注意,此正则表达式将允许不存在的 TLD,但除非您想从事与新 TLD 保持同步的业务,否则我建议您继续使用此正则表达式。

于 2012-06-04T02:30:16.720 回答