我正在使用jquery验证(http://docs.jquery.com/Plugins/Validation),如下所示:
var $__field = $("#selector");
if ($__field.is(":visible")) {
$__field.rules('add', { required: true });
$__field.rules('add', { number: true });
}
如果用户输入的数字没有前导零,例如.5则jquery验证显示“请输入有效数字”。
如何更改验证以允许数字输入而不需要前导零?
答案 0 :(得分:28)
问题在于用于数字的正则表达式。看the latest version,第1021-1023行,我们得到了:
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
问题在于,第一个查找前导负号和数字的块,无论是个体还是以逗号分隔的三个一组,都不是可选的:
(?:\d+|\d{1,3}(?:,\d{3})+)
在最后处理?
将使其成为可选:
(?:\d+|\d{1,3}(?:,\d{3})+)?
通过此次更新,您可以修改插件的本地副本,将正则表达式更改为修改后的版本,也可以在javascript中添加replacement validation method:
jQuery.validator.addMethod("number", function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
}, "Please enter a valid number.");
在进行addMethod
调用的任何网页上,都会覆盖number
验证方法,以执行不需要前导零的数字验证。
答案 1 :(得分:0)
jQuery Validation 1.14.0中包含的解决方案负责处理领先的零问题,但留下了一个主要的负号问题。 -124无效。 -0.124有效。上面发布的RegEx似乎允许-.124,所以我更赞成jQuery Validation 1.14.0中的解决方案