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

JK.*_*JK. 13 jquery jquery-validate asp.net-mvc-2

我正在使用jquery验证(http://docs.jquery.com/Plugins/Validation),如下所示:

    var $__field = $("#selector");  
    if ($__field.is(":visible")) {  
        $__field.rules('add', { required: true });
        $__field.rules('add', { number: true });
    } 
Run Code Online (Sandbox Code Playgroud)

如果用户输入的数字没有前导零,例如.5则jquery验证说"请输入有效数字".

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

bof*_*ynn 28

问题在于用于数字的正则表达式.看看最新版本,第1021-1023行,我们得到了:

number: function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
Run Code Online (Sandbox Code Playgroud)

问题是,这个第一个块,它可以是单个的,也可以是以逗号分隔的三个一组中的前导负号和数字,它不是可选的:

(?:\d+|\d{1,3}(?:,\d{3})+)
Run Code Online (Sandbox Code Playgroud)

搭接一?对最终将使可选:

(?:\d+|\d{1,3}(?:,\d{3})+)?
Run Code Online (Sandbox Code Playgroud)

通过此更新,您可以修改插件的本地副本,将正则表达式更改为修改后的版本,或者在javascript中添加替换验证方法:

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.");
Run Code Online (Sandbox Code Playgroud)

在具有此addMethod调用的任何页面上,number将覆盖验证方法以执行不需要前导零的数字验证.

  • 仅供参考,此修复程序已合并到2012年9月7日发布的脚本v1.10.0中. (3认同)