jQuery Validation插件 - 有多个"冲突"规则

时间:2017-07-31 22:44:22

标签: javascript jquery jquery-validate

我的验证码是这样的:

$("#form").validate({
    rules: {
        ...
        phone_number: {
            phoneUS: true,
            phonesUK: true,
            phoneNL: true
        }
        ...
    }
});

如您所见,我使用多个冲突的规则(所有电话号码)。我的目的是涵盖尽可能多的电话号码语法的验证。

根据我的上述代码,我使用美国,英国和NL电话号码验证,因为默认情况下,这些验证与additional-methods.js一起打包。

但是,它不起作用。它不只是一个电话号码不起作用;这三种类型都不起作用。我尝试输入:

  • 7815558923(US)
  • 781 555 8923(US)
  • 781-555-8923(US)
  • 01632 960881(英国)
  • 06-14147112(NL)

所有这些都是我在网上找到的假的,生成的数字。无论如何,他们都没有通过验证,我认为这是因为我包含了所有三个验证规则。

所以,问题是,如何让多个验证规则覆盖尽可能多的区域,同时避免冲突导致系统崩溃?

1 个答案:

答案 0 :(得分:-1)

你应该尝试定义这样的电话号码规则:

以下是一个简单示例:http://jsfiddle.net/dSz5j/

$(document).ready(function () {

    jQuery.validator.addMethod("phoneUS", function (phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, "");
        return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    }, "Please specify a valid us phone number");

    /*
    jQuery.validator.addMethod("phonesUK", function (phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, "");
        return this.optional(element) || phone_number.length > 9 && phone_number.match(/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/);
    }, "Please specify a valid uk phone number");
    */

    $('#myform').validate({ // initialize the plugin
        rules: {
            phone_number: {
                required: true,
                phoneUS: true
            }
        },
        submitHandler: function (form) { // for demo
            alert('valid form submitted'); // for demo
            return false; // for demo
        }
    });

});