.net 范围数据批注属性未验证。99?
我已将.net 范围数据批注属性未验证。99?,.net,asp.net-mvc-3,range,data-annotations,.net,Asp.net Mvc 3,Range,Data Annotations,我已将范围(十进制、十进制等)应用于模型中的属性。它不验证.99,但验证0.99 如何允许前导零?这是ASP.NET MVC 3默认附带的jquery.validate.js和jquery.validate.min.js文件中数字regexp中的一个错误 以下是来自jquery.validate.js,第1048行的代码: // http://docs.jquery.com/Plugins/Validation/Methods/number number: function(value, ele
范围(十进制、十进制等)
应用于模型中的属性。它不验证.99
,但验证0.99
如何允许前导零?这是ASP.NET MVC 3默认附带的
jquery.validate.js
和jquery.validate.min.js
文件中数字regexp中的一个错误
以下是来自jquery.validate.js
,第1048行的代码:
// http://docs.jquery.com/Plugins/Validation/Methods/number
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
}
此函数针对数字正则表达式执行字符串测试。若要修复它,请将regexp替换为以下一个:/^-(?:\d+\d{1,3}(?,\d{3}+)+)(?:\。\d+)$/
这是一个简短的版本。下面是解释:
Buggy^-?(?:\d+\d{1,3}(?:,\d{3})+)(?:\。\d+)$
regexp的内容如下:
^-?
Beginning of line or string
-, zero or one repetitions
Match expression but don't capture it. [\d+|\d{1,3}(?:,\d{3})+]
Select from 2 alternatives
Any digit, one or more repetitions
\d{1,3}(?:,\d{3})+
Any digit, between 1 and 3 repetitions
Match expression but don't capture it. [,\d{3}], one or more repetitions
,\d{3}
,
Any digit, exactly 3 repetitions
Match expression but don't capture it. [\.\d+], zero or one repetitions
\.\d+
Literal .
Any digit, one or more repetitions
End of line or string
如您所见,第二个捕获组(?:\。\d+)
允许使用.XX
格式的数字,但在匹配时,第一个组(?:\d+\d{1,3}(?:,\d{3})+
首先被检查,验证失败,因为第一个组必须匹配
如果我们参考演示并检查它们的regexp以进行数字验证,它将如下所示:^-(?:\d+\d{1,3}(?:,\d{3})+)(?:\。\d+)$
。这与buggy one相同,但现在第一个匹配组应该是零次或一次重复,或者换句话说是可选的。regexp中的这个额外的?
修复了这个bug
编辑:这也适用于MVC4默认模板。两个模板都使用1.9.0版本的插件。在版本1.10.0中,此问题已修复。发件人:
- 修正了不带前导零的小数的正则表达式问题。增加了新的测试方法。修复#41