jQuery Validation Plugin 1.11.1>规则>自定义逻辑运算符(=> rule1 OR rule2 OR rule3 ...)

时间:2018-01-05 09:54:44

标签: jquery jquery-validate

举一个例子,我如何定义一个空白或数字或“foo”的字段?

我目前有这个:

var myValidator= jQuery2("#myFormId").validate({
    rules: {
        myField: {
            digits: true,
            required: false,
            maxlength: 9999,
            myCustomRule: true
        }
}});
jQuery2.validator.addMethod("myCustomRule", function(value, element) {
    return value === "foo" || value=="";
}, "myMessage");

但是,jQuery Validation Plugin会在需求之间自动应用AND逻辑运算符,我该如何进行OR? (或者让我的自定义方法调用jQuery Validation Plugin内置规则,比如 digits ?我不是javascript guru,也许这很明显看源?)

2 个答案:

答案 0 :(得分:2)

  

标题:... 自定义逻辑运算符(=> rule1 OR rule2 OR rule3 ...)

当您声明此插件的规则时,它将应用使用逻辑AND声明的所有规则。

rules: {
    myField: {
        digits: true,
        //required: false, // <- 'false' is superfluous/default
        maxlength: 9999,
        myCustomRule: true
    }
}

以上说明此字段必须满足digits AND maxlengthmyCustomRule;如果required写得恰当,则不会是myCustomRule

在评估声明规则列表时,此插件中没有选项可将“AND”更改为“OR”。

使用OR运算符评估规则的唯一方法是创建一个自定义规则,将所有验证逻辑包含在一个函数中。

rules: {
    myField: {
        myCustomRule: true
    }
}

myCustomRule包含您自己的函数,其中所有规则逻辑由OR运算符分隔。请参阅下文,了解您的确切示例的解决方案。

  

...如何定义可以为空的字段或数字或“foo”?

必须创建一个自定义规则,在一个函数中执行所有这三个操作。

  • 空白:这被视为“可选”,当您创建自己的自定义规则时,除非您将结果与this.optional(element)进行比较,否则不会允许该字段保持空白使用OR运算符。

  • “foo”:使用value === "foo"

  • 数字:只需使用现有digits规则的代码,/^\d+$/.test(value)

然后使用OR运算符将它们串起来......

$.validator.addMethod("myCustomRule", function(value, element) {
    return this.optional(element) || value === "foo" || /^\d+$/.test(value);
}, "myMessage");

所有内容都包含在此新自定义规则中,因此您不得声明任何其他规则......

var myValidator = $("#myFormId").validate({
    rules: {
        myField: {
            myCustomRule: true
        }
    }
});

结果是一个“可选”字段,它也将验证数字或字符串“foo”。

DEMO:jsfiddle.net/tLoef0ov/

答案 1 :(得分:1)

以下是如何做到这一点。您不能在案例中使用digits: true,因为您希望它是数字或&#34; foo&#34;。

&#13;
&#13;
var myValidator = $("#myFormId").validate({
  rules: {
    myField: {
      required: false,
      maxlength: 9,
      myCustomRule: true
    }
  }
});

$.validator.addMethod("myCustomRule", function(value, element) {
  return value === "" || value === "foo" || !isNaN(value);
}, "myMessage");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<form id="myFormId">
  <input type="text" name="myField" />
</form>
&#13;
&#13;
&#13;