2014-02-26 39 views
2

我使用MVC数据注释为我的模型上的字段指定验证正则表达式。该字段是可选的,即,它不具有施加的[Required]属性:不显眼的验证:可选字段的正则表达式验证

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

当客户端验证运行时,该字段不针对正则表达式验证。

$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)); 
}); 

我怎样才能添加验证,使空场是允许的,但如果输入一个值,它必须在正则表达式匹配:综观jquery.validate.unobtrusive.js代码为什么会变得清楚了吗?

关于编辑:很明显,我可以更改jquery.validate.unobtrusive.js中的代码,但我宁愿保留此文件,以免我的更改被未来更新覆盖。

+0

如果由于if(this.optional(element)){'condition –

+0

@ Arun P Johny:字段是空的,它应该允许:完全。我该如何改变这种情况(同时将代码保留在jquery.validate.unobtrusive.js中)? – matk

+0

参见http://jsfiddle.net/arunpjohny/m8J8H/1/ –

回答

0

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

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

了解更多信息退房this Microsoft article

+0

这并没有什么区别,因为验证函数在它看到实际的正则表达式之前退出,因为if(this.optional(element)) {...}线。 – matk

0

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

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