具有多个规则的jQuery表单验证插件

时间:2013-12-29 19:25:43

标签: jquery jquery-validate

我正在使用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才能验证表单。

1 个答案:

答案 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
}