jQuery使用两个冲突范围验证rangelength

时间:2016-11-29 10:00:10

标签: jquery jquery-validate

格式A:01234567890123456(17个字符)
格式B:01234567890123456789012(23个字符)

在我的情景中,17和23都被接受,既不是更少或更多,也不是中间。

所以,

  • 2个字符不正确
  • 16个字符不正确
  • 17个字符正确
  • 18个字符不正确
  • 21个字符不正确
  • 23个字符正确
  • 23个字符不正确

典型的rangelength method并不符合这种条件。

$( "#myform" ).validate({
  rules: {
    national_id: {
      required: true,
      rangelength: [17, 23]
    }
  }
});

因为它可以接受18/19/20/21/22正确 - 这应该是错误的。

如何使用jQuery Validation插件实现此类rangelength验证?

PS:我知道我可以像this one一样轻松做事,但是我们可以使用jQuery验证来做这件事吗?

2 个答案:

答案 0 :(得分:2)

您必须使用the .addMethod() method来创建自己的自定义规则。

jQuery.validator.addMethod("exactlengths", function(value, element, params) {
    return this.optional(element) || (value.length == params[0] || value.length == params[1]);
}, jQuery.validator.format("Please only enter {0} or {1} characters"));

宣称:

$( "#myform" ).validate({
    rules: {
        national_id: {
            required: true,
            exactlengths: [17, 23] ....

DEMO jsfiddle.net/L5ff6jqw/

答案 1 :(得分:0)

我在extra.js中添加了一个方法,该方法将验证范围并允许特定数字:

 $.validator.addMethod(
    "ranges_and_single",
     function(value, element, ranges) {
        var allowMeToo = false;
        var valid = false;
        console.log(this.optional(element));
        for(var i=0; i<ranges.length; i++) {
            if(ranges[i].length == 1) { 
                if(value == ranges[i][0])
                {
                    allowMeToo = true;
                }
            }
            if(allowMeToo)
            {
                valid = true;
                break;
            }
            else if(value >= ranges[i][0] && (value <= ranges[i][1] || allowMeToo )) {
                valid = true;
                break;
            }
        }

        return this.optional(element) || valid;
    },
    "Please enter the value in the ranges or perticular number"
 );

例如

$( "#myform" ).validate({
  rules: {
    fieldName: {
      ranges_and_single:[ [2, 5], [7], [10, 15], [17], [25] ],
    //It will allow 2, 3, 4, 5 7, 10, 11, 12, 13, 14, 15, 17 and 25
    }
  }
});