【问题标题】:Jquery validation - allow number without the leading zero?Jquery验证 - 允许没有前导零的数字?
【发布时间】:2011-03-08 22:24:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    问题在于用于数字的正则表达式。查看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 验证方法将被覆盖以执行不需要前导零的数字验证。

    【讨论】:

    • 谢谢 - 这个问题已经好几个月没有回复了!
    • 没问题。这让我对我一直在构建的系统和寻找答案找到了你的问题。我已经通过电子邮件向插件创建者发送了关于正则表达式的反馈意见,如果没有问题,我将把修复程序纳入插件。
    • 非常有帮助的答案。我在解决方案中遇到的一个小问题: jQuery.validator.addMethod("numeric"... 应该是 jQuery.validator.addMethod("number"
    • 仅供参考,此修复已纳入脚本的 v1.10.0,于 2012-09-07 发布。
    【解决方案2】:

    jQuery Validation 1.14.0 中包含的解决方案处理了前导零问题,但留下了前导负号问题。 -.124 无效。 -0.124 有效。上面帖子中提供的 RegEx 似乎允许 -.124,所以我喜欢它而不是 jQuery Validation 1.14.0 中的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多