如何使用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 } }); 

更新 – 工作原理

我被问到这是如何工作的。 我不知道所有的细节; 我在以前存在的方法上建模了这种方法。 但是,这是我解释它的最佳尝试。

  • 该函数接受valueelementparam
    • value是在要validation的字段中输入的值
    • element是字段本身
    • param是规则类型和冒号之后的任何内容。 在上面的例子中, exactlength: 10
  • 下一行是一个return语句。 这将validation方法的最终判定返回给调用它的代码。 任何返回truevalidation方法都是说’此字段通过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消息即可。