正则表达式与 C# 的工作方式是否不同
本文关键字:是否 方式 工作 正则表达式 | 更新日期: 2023-09-27 18:36:06
我正在尝试验证电子邮件字符串,似乎我在 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#中完成这项工作,我还需要考虑其他因素吗?
您还需要允许小写字母。每次您有A-Z
时,您都可以将其更改为 A-Za-z
.
另请注意,此正则表达式拒绝一些有效的电子邮件地址,如网站上所述。例如,它拒绝来自.museum
顶级域的电子邮件地址,仅举一个例子。
如您已经提供的链接中所述:
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 的业务,否则我建议您继续使用此正则表达式。