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

its*_*e69 3 jquery jquery-validate

我正在使用jQueryValidation插件.问题:我想在一个输入字段中使用多个模式规则.例如:

$("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]*$/
    }
 }
});
Run Code Online (Sandbox Code Playgroud)

会发生什么:插件只测试第二个模式规则.例如,输入类似"tst"的东西(因为这符合秒模式),虽然它违反了第一个模式规则.

据我了解此插件中规则的逻辑,所有规则都必须返回TRUE才能验证表单.

Spa*_*rky 6

您不能key:value两次使用同一对,因为第二个实例将覆盖第一个实例.

你有几个选择.

  • 将两个正则表达式组合成一个.将使用一条错误消息声明一种方法.因此,您将使用该方法创建自己的自定义规则,而不是使用文件中的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");
Run Code Online (Sandbox Code Playgroud)

宣布像这样......

"password": {
    required: true,
    foo: true,
    bar: true
}
Run Code Online (Sandbox Code Playgroud)