我正在使用 jquery 验证 ( http://docs.jquery.com/Plugins/Validation ),如下所示:
var $__field = $("#selector");
if ($__field.is(":visible")) {
$__field.rules('add', { required: true });
$__field.rules('add', { number: true });
}
如果用户输入一个没有前导零的数字,例如 0.5,则 jquery 验证会显示“请输入有效数字”。
如何更改验证以允许数字输入而不需要前导零?
最佳答案
问题出在用于数字的正则表达式上。正在查看the latest version ,第 1021-1023 行,我们得到:
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
问题在于,第一个 block (它查找前导负号和数字,无论是单独的还是以逗号分隔的三个一组)不是可选的:
(?:\d+|\d{1,3}(?:,\d{3})+)
在末尾添加 ?
将使其可选:
(?:\d+|\d{1,3}(?:,\d{3})+)?
通过此更新,您可以修改插件的本地副本,将正则表达式更改为修改后的版本,或者添加 replacement validation method到你的 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.");
在任何使用此 addMethod
调用的页面上,number
验证方法都将被覆盖,以执行不需要前导零的数字验证。
关于Jquery验证-允许数字不带前导零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129150/