Jquery验证 - 允许数字没有前导零?

时间:2010-06-27 22:35:15

标签: jquery asp.net-mvc-2 jquery-validate

我正在使用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验证显示“请输入有效数字”。

如何更改验证以允许数字输入而不需要前导零?

2 个答案:

答案 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中的解决方案