正则表达式与 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#中完成这项工作,我还需要考虑其他因素吗?

正则表达式与 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 的业务,否则我建议您继续使用此正则表达式。

相关文章: