我正在使用jQueryValidation插件。 问题:我想在一个输入字段中使用多个模式规则。 E.g:
$("form").validate({
rules: {
"email": {
required: true,
email: true
},
"password": {
required: true,
pattern: /^[A-Za-z0-9\w]{4,20}/,
pattern: /^[\d\w\xC4\xD6\xDC\xE4\xF6\xFC\xDF]*$/
}
}
});
会发生什么:插件只测试第二个模式规则。例如。输入类似“tst”的东西(因为这符合秒模式)虽然它违反了第一个模式规则。
据我了解此插件中规则的逻辑,所有规则都必须返回TRUE才能验证表单。
答案 0 :(得分:6)
您不能两次使用相同的key:value
对,因为第二个实例会覆盖第一个。{/ p>
你有几个选择。
将两个正则表达式合并为一个。将使用一条错误消息声明一种方法。因此,您不会使用pattern
文件中的additional-methods.js
规则/方法,而是使用.addMethod()
方法创建自己的自定义规则。
不要使用正则表达式模式,而是使用pattern
规则一次,然后使用.addMethod()
创建新的第二条规则。
请参阅:http://jqueryvalidation.org/jQuery.validator.addMethod/
我会创建一个专用于每个正则表达式模式的自定义方法,并为其提供语义相关的名称,类似“电子邮件”,“电话”,“字母数字”,“IP”等。 (这也与此插件在内部处理所有正则表达式评估规则的方式相同。)
jQuery.validator.addMethod("foo", function(value, element) {
return this.optional(element) || /^[A-Za-z0-9\w]{4,20}/.test(value);
}, "Your entered data is not foo");
jQuery.validator.addMethod("bar", function(value, element) {
return this.optional(element) || /^[\d\w\xC4\xD6\xDC\xE4\xF6\xFC\xDF]*$/.test(value);
}, "Your entered data is not bar");
这样声明......
"password": {
required: true,
foo: true,
bar: true
}