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

具有多个规则的jQuery表单验证插件,jquery,jquery-validate,Jquery,Jquery Validate,我正在使用jQueryValidation插件问题:我想在一个输入字段中使用多个模式规则。例如: $("form").validate({ rules: { "email": { required: true, email: true }, "password": { required: true, pattern: /^[A-Za-z0-9\w]{4,20}/, pattern: /^[\

我正在使用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]*$/
    }
 }
});
发生了什么:插件只测试第二个模式规则。例如,输入类似“tst”的内容可以工作(因为这符合秒模式),尽管它违反了第一个模式规则


据我所知,该插件中的规则逻辑,所有规则都必须返回TRUE才能验证表单。

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

你有两个选择

  • 将两个正则表达式组合为一个。将用一条错误消息声明一个方法。因此,您将使用
    .addMethod()
    方法创建您自己的自定义规则,而不是使用
    附加方法.js
    文件中的
    模式
    规则/方法

  • 不要组合正则表达式模式,而是使用
    模式
    规则一次,然后使用
    .addMethod()
    创建第二个新规则

见:


我会为每个正则表达式模式创建一个自定义方法,并给它一个语义相关的名称,比如“email”、“phone”、“字母数字”、“IP”等(这也是该插件内部处理所有正则表达式计算规则的相同方式)

像这样宣布

"password": {
    required: true,
    foo: true,
    bar: true
}

javascript对象不能有两个相同的键,第二个实例将覆盖第一个。您需要为第二个模式添加自己的方法,或者将这两种方法合并到一个正则表达式中
"password": {
    required: true,
    foo: true,
    bar: true
}