如何使用jQueryvalidation检查确切的长度?
使用jQuery Validation插件validation表单,如何确认字符串是否正好是X个字符?
由于(目前)没有内置方法,因此您需要添加自己的方法。 这可行:
jQuery.validator.addMethod("exactlength", function(value, element, param) { return this.optional(element) || value.length == param; }, $.validator.format("Please enter exactly {0} characters."));
然后可以像这样使用:
$("#formtovalidate").validate({ rules: { somefield: { exactlength: 10 } });
更新 – 工作原理
我被问到这是如何工作的。 我不知道所有的细节; 我在以前存在的方法上建模了这种方法。 但是,这是我解释它的最佳尝试。
- 该函数接受
value
,element
和param
。-
value
是在要validation的字段中输入的值 -
element
是字段本身 -
param
是规则类型和冒号之后的任何内容。 在上面的例子中,exactlength: 10
-
- 下一行是一个
return
语句。 这将validation方法的最终判定返回给调用它的代码。 任何返回true
validation方法都是说’此字段通过validation!’ 它将返回它所在行的值。 -
return
后跟两个声明,用’或’运算符(||
)分隔。-
||
运算符意味着’评估此项左侧的项目。 如果是真的,则返回true。 如果没有,请尝试右边的那个。 如果是真的,则返回true。 否则,返回false。- 左边的项目是
this.optional(element)
。 如果规则中不需要该元素,则返回true,validation也将返回true。 这意味着’如果我不告诉你这个领域是必需的,我不在乎它是否有效。’ - 如果需要该字段,我们将移至
||
的右侧 。 这是实际的validation测试。 它将字段输入的长度与您指定的长度进行比较。 如果它们相同,则返回true,方法返回true,validation通过。 否则,validation失败。
- 左边的项目是
-
就是这样。 有关进一步的帮助,请参阅文档 ,特别是有关自定义validation方法的部分。
例:
rules : { "someFieldName":{digits:true,minlength:20,maxlength:20} }
您还可以通过提供如下动态消息使现有rangelength
方法支持精确范围:
$.extend($.validator.messages, { rangelength: function(args, inputElement) { var isExactRange, min, max; // Cast arguments as numbers min = Number(args[0]); max = Number(args[1]); isExactRange = min === max; if (isExactRange) { return 'Please enter exactly ' + min + ' characters.'; } return 'Please enter between ' + min + ' and ' + max + ' characters.'; } );
可以看出,您可以根据传递给validation方法的参数动态生成消息。 消息回调传递validation方法参数作为它们的第一个参数,并且输入元素被validation为它们的第二个参数。
这使得在指定精确范围时可以返回一条消息,但如果上限和下限不同,则可以返回另一条消息。
要回rangelength
默认的rangelength
消息,请替换
'Please enter between ' + min + ' and ' + max + ' characters.'
同
$.validator.messages.rangelength
如果官方文档会更新会很好,因为它很难导航并且没有描述插件的所有function。
最简单的方法是通过数据属性使用现有的validation方法,然后只需设置自己的validation消息即可。