jQuery 验证插件 1.11.1 > 规则 > 自定义逻辑运算符(=> 规则 1 或规则 2 或规则 3 ...)
jQuery Validation Plugin 1.11.1 > rules > custom logical operators (=> rule1 OR rule2 OR rule3...)
举个例子,我如何定义一个可以为空白或数字或 "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 验证插件内置规则,如 digits?我不是 javascript 大师,也许从源代码中可以看出这一点? )
这是操作方法。你不能在你的情况下使用 digits: true
因为你希望它是一个数字或 "foo".
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");
<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>
Title: ... custom logical operators (=> rule1 OR rule2 OR rule3…)
当您为此插件声明规则时,它将应用使用逻辑 AND 声明的所有规则。
rules: {
myField: {
digits: true,
//required: false, // <- 'false' is superfluous/default
maxlength: 9999,
myCustomRule: true
}
}
上面说这个字段必须满足digits
AND maxlength
AND myCustomRule
;如果 myCustomRule
写得正确,它就不会是 required
。
在评估声明的规则列表时,此插件中没有将 "AND" 更改为 "OR" 的选项。
使用 OR 运算符评估规则的唯一方法是创建一个自定义规则,将所有验证逻辑包含到一个函数中。
rules: {
myField: {
myCustomRule: true
}
}
其中 myCustomRule
包含您自己的函数,所有规则逻辑由 OR 运算符分隔。请参阅下面的具体示例的解决方案。
... how can I define a field that can be blank OR digits OR "foo" ?
您必须创建一个自定义规则,在一个函数中执行所有三个操作。
空白:这被认为是"optional"并且当您创建自己的自定义规则时,它将不允许该字段保持空白,除非您使用 OR 运算符将结果与 this.optional(element)
进行比较。
"foo":使用value === "foo"
digits: 只需使用现有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
}
}
});
结果是一个 "optional" 字段,该字段也将验证数字或字符串 "foo"。
举个例子,我如何定义一个可以为空白或数字或 "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 验证插件内置规则,如 digits?我不是 javascript 大师,也许从源代码中可以看出这一点? )
这是操作方法。你不能在你的情况下使用 digits: true
因为你希望它是一个数字或 "foo".
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");
<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>
Title: ... custom logical operators (=> rule1 OR rule2 OR rule3…)
当您为此插件声明规则时,它将应用使用逻辑 AND 声明的所有规则。
rules: {
myField: {
digits: true,
//required: false, // <- 'false' is superfluous/default
maxlength: 9999,
myCustomRule: true
}
}
上面说这个字段必须满足digits
AND maxlength
AND myCustomRule
;如果 myCustomRule
写得正确,它就不会是 required
。
在评估声明的规则列表时,此插件中没有将 "AND" 更改为 "OR" 的选项。
使用 OR 运算符评估规则的唯一方法是创建一个自定义规则,将所有验证逻辑包含到一个函数中。
rules: {
myField: {
myCustomRule: true
}
}
其中 myCustomRule
包含您自己的函数,所有规则逻辑由 OR 运算符分隔。请参阅下面的具体示例的解决方案。
... how can I define a field that can be blank OR digits OR "foo" ?
您必须创建一个自定义规则,在一个函数中执行所有三个操作。
空白:这被认为是"optional"并且当您创建自己的自定义规则时,它将不允许该字段保持空白,除非您使用 OR 运算符将结果与
this.optional(element)
进行比较。"foo":使用
value === "foo"
digits: 只需使用现有
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
}
}
});
结果是一个 "optional" 字段,该字段也将验证数字或字符串 "foo"。