我正在使用MVC数据注释为我的模型上的字段指定验证正则表达式。该字段是可选的,即它没有应用[Required]
属性:
[RegularExpression(@"^\d+$")]
public int Quantity { get; set; }
运行客户端验证时,不会对正则表达式验证此字段。查看jquery.validate.unobtrusive.js中的代码,可以清楚地了解原因:
$jQval.addMethod("regex", function (value, element, params) {
var match;
if (this.optional(element)) { // <- returns if field is optional
return true;
}
match = new RegExp(params).exec(value);
return (match && (match.index === 0) && (match[0].length === value.length));
});
如何添加验证以允许空字段,但是如果输入了值,它必须与正则表达式匹配?
On edit:显然我可以更改jquery.validate.unobtrusive.js中的代码,但我宁愿单独保留此文件,以便我的更改不会被未来的更新覆盖。
答案 0 :(得分:0)
您的正则表达式不正确。 d+
表示“匹配一个或多个十进制数字”。将您的数据注释更改为此(请注意*
代替+
,这意味着“零次或多次”):
[RegularExpression(@"^\d*$")]
public int Quantity { get; set; }
查看this Microsoft article了解详情。
答案 1 :(得分:0)
您需要使用[Required]
属性使值不是可选的,并使用允许空字符串的正则表达式,方法是更改+
(一个或多个) *
(零或更多):
[Required]
[RegularExpression(@"^\d*$")]