如何使用jQuery验证检查确切的长度?

时间:2009-08-04 18:31:46

标签: jquery validation jquery-validate

使用jQuery Validation plugin验证表单,您如何确认字符串的长度恰好为X个字符?

4 个答案:

答案 0 :(得分:52)

由于(目前)没有内置方法,因此您需要添加自己的方法。这可行:

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是在有效字段中输入的值
    • element是字段本身
    • param是规则类型和冒号之后的任何内容。在上面的示例中,它是exactlength: 10
    • 中的10
  • 下一行是return语句。这将验证方法的最终判定返回到调用它的代码。任何返回true的验证方法都是说'此字段通过验证!'它将返回它所在行的值。
  • return之后是两个声明,由'或'运算符(||)分隔。
    • ||运算符表示'评估此项左侧的项目。如果是真的,则返回true。如果没有,请尝试右边的那个。如果是真的,则返回true。否则,返回false。
      • 左侧的项目为this.optional(element)。如果规则中不需要该元素,则返回true,验证也将返回true。这意味着'如果我不告诉你这个字段是必需的,我不在乎它是否有效。'
      • 如果需要该字段,我们会移至||的右侧。这是实际的验证测试。它将字段输入的长度与您指定的长度进行比较。如果它们相同,则返回true,方法返回true,验证通过。否则,验证失败。

就是这样。如需进一步的帮助,请参阅documentation,尤其是关于custom validation methods的部分。

答案 1 :(得分:19)

示例:

rules : {
"someFieldName":{digits:true,minlength:20,maxlength:20}
}

答案 2 :(得分:3)

您还可以通过提供如下动态消息,使现有的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.';
    }
);

可以看出,您可以根据传递给验证方法的参数动态生成消息。消息回调传递验证方法参数作为它们的第一个参数,输入元素被验证为它们的第二个参数。

这使得在指定精确范围时可以返回一条消息,但如果上限和下限不同,则可以返回另一条消息。

要回退到默认的rangelength消息,请替换

'Please enter between ' + min + ' and ' + max + ' characters.'

$.validator.messages.rangelength

如果更新官方文档会很好,因为它很难导航并且没有描述插件的所有功能。

答案 3 :(得分:3)

最简单的方法是通过数据属性使用现有的验证方法,然后为了清晰起见,只需设置自己的验证消息。

<input data-rule-minlength="8" data-rule-maxlength="8" data-msg-minlength="Exactly 8 characters please" data-msg-maxlength="Exactly 8 characters please">