如果没有值,jQuery验证忽略自定义验证规则

jQuery Validate ignore custom validation rule if no value

我正在使用jQuery Validator插件。 一切都很完美,我想做最后的调整。 我只是找不到正确的组合。

我有一个名为"phone"的文本输入。 如果没有输入任何值,我想忽略所有规则 - 只留下输入。 目前,如果我关注,然后集中注意力(不输入值)输入被验证,我的UI用我的有效标记更新。 哪个,没关系,但理想情况下,我想单独留下输入。 仅验证是否存在值。 我必须在我的自定义方法中返回true / false,否则它总是无效的。

不知道我能做什么。 感谢您的时间!

HTML:

1
<input id="phone" name="phone" tabindex="7" placeholder="(###) ###-####" type="text" value="">

这是我输入的规则:

JavaScript的

1
2
3
4
5
6
7
8
9
10
....
'phone': {
            'required': {
                'depends': function(element) {
                    return $('#textOptIn').is(':checked');
                }
            },
            'hasValidPhoneNumber': true
        },
....

这是我的自定义方法:

JavaScript的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$.validator.addMethod('hasValidPhoneNumber', function(value, element) {
    if (value === '' || value.replace(/ /g, '') === '(###)###-####')
    {
        return true;
    }
    else
    {
        return isValidPhoneNumber(value); //
    }

}, messages.invalidPhoneNumber);



function isValidPhoneNumber(phoneNumber) {
    var pattern = /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/;
    return pattern.test(phoneNumber);
}


不要检查它是否为空,而是使用this.optional(element)。 它只是使字段可选。 换句话说,如果你把它留空,它根本就不会被评估。

1
2
3
4
5
6
7
8
$.validator.addMethod('hasValidPhoneNumber', function(value, element) {
    if (this.optional(element) || value.replace(/ /g, '') === '(###)###-####') {
        return true;
    }
    else {
        return isValidPhoneNumber(value); //
    }
}, messages.invalidPhoneNumber);