Asp.net mvc 如何使属性可选但仍使用正则表达式?

Asp.net mvc 如何使属性可选但仍使用正则表达式?,asp.net-mvc,validation,Asp.net Mvc,Validation,目前,电子邮件需要验证,如果用户输入电子邮件,我如何使其成为可选的并仍然使用正则表达式 [Required(ErrorMessageResourceType = typeof(Errors), ErrorMessageResourceName = "Email_Val")] [RegularExpression(@"^\w+([-+.]*[\w -]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}", ErrorMessageResourceType = typeof(Error

目前,电子邮件需要验证,如果用户输入电子邮件,我如何使其成为可选的并仍然使用正则表达式

[Required(ErrorMessageResourceType = typeof(Errors), ErrorMessageResourceName = "Email_Val")]
[RegularExpression(@"^\w+([-+.]*[\w -]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}", ErrorMessageResourceType = typeof(Errors), ErrorMessageResourceName = "RegExp_Val")]
public string Email { get; set; }

只需添加一个非捕获组并像这样使用
^(?:\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+){1,}.\w{2,4})$


它匹配一个空白字段或一封与正则表达式匹配的电子邮件。

看起来您可以删除?:并且它仍然有效?@coolbreeze是的,只要您不需要
$1
的值,该值将引用不带
?:
的不同组。我没有使用任何值,只需查找真或假。只需删除
RequiredAttribute
。如果客户端或服务器上的属性值为
null
(或空字符串),则不计算
RegularExpressionAttribute