0

MSDN 有一个验证电子邮件地址的示例,下面是它使用的 RegEx。这是我见过的最好的正则表达式 bcz 与所有其他的不同,它将 xx@[IP 地址] 识别为有效的电子邮件地址。我的问题是我无法让它在 MVC3 表单验证中工作。jQuery.validate.unobtrusive.js 抛出一个错误,说“无效组”。以前有人经历过吗?

RegEx:

^(?("")(""[^""]+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17}))$

MVC 3 Model:

[RegularExpression(@"^(?("")(""[^""]+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17}))$", ErrorMessageResourceName = "ErrorInvalidEmail", ErrorMessageResourceType = typeof(OptInOutResource))]
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "lblUserName", ResourceType = typeof(MyResource))]
public string UserName { get; set; }
4

1 回答 1

0

您的正则表达式在问号后缺少等号(?((两次出现)

尝试这个:

^(?=("")(""[^""]+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?=(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,17}))$

他们注定要向前看(?=<regex>)

于 2013-07-09T03:29:27.173 回答