MSDN有an example of validating email address,以下是它使用的RegEx。这是我见过的最好的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; }
答案 0 :(得分: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>)