不显眼的验证:可选字段的正则表达式验证

时间:2014-02-26 15:05:20

标签: jquery validation unobtrusive-validation

我正在使用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中的代码,但我宁愿单独保留此文件,以便我的更改不会被未来的更新覆盖。

2 个答案:

答案 0 :(得分:0)

您的正则表达式不正确。 d+表示“匹配一个或多个十进制数字”。将您的数据注释更改为此(请注意*代替+,这意味着“零次或多次”):

[RegularExpression(@"^\d*$")]
public int Quantity { get; set; }

查看this Microsoft article了解详情。

答案 1 :(得分:0)

您需要使用[Required]属性使值不是可选的,并使用允许空字符串的正则表达式,方法是更改​​+一个或多个*零或更多):

[Required]
[RegularExpression(@"^\d*$")]