繁体   English   中英

正则表达式不适用于jQuery Form Validation插件

[英]Regular expression not working with jquery form validation plugin

我正在使用表单验证插件,并使用正则表达式来验证英国邮政编码。 我正在使用此参考正则表达式,其中作者说它可以验证所有邮政编码。 但是,当我尝试提交表单时,对于每种字符串,它都表示无效。 我尝试了以下方法(摘自Wikipedia的示例, 这是页面

W1A 1HQ

EC1A 1BB

M1 1AA

B33 8TH

这是我的JS代码

$(document).ready(function(){

$.validator.addMethod("regex", function(value, element, regexp) {
            var re = new RegExp(regexp);
            console.debug(re.test(value))
            return this.optional(element) || re.test(value);
        },
        "Post code is not valid"
);

$("#addPropertyForm").validate({
    rules : {

        postCode : {
            required : true,
            regex: "(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})"
        }
    },
    messages : {

        postCode : {
            required : 'Post code is required',
        }
    },
    onkeyup: false,
    onblur: true,
    focusCleanup: true,
    focusInvalid: false
});
});

任何人都可以帮我这段代码有什么问题吗

在不深入检查正则表达式代码的情况下,我可以看到它不匹配任何空格(如果不在第一个块和最后一个块中……):是否有可能只需要从邮政编码中W1A 1HQ EC1A 1BB M1 1AA B33 8TH空格(“ W1A 1HQ EC1A 1BB M1 1AA B33 8TH在您的测试用例中,如果我理解正确),然后再与正则表达式进行匹配?

更新 :OP确实纠正了该问题(测试代码中有4个不同的代码...),所以我上面的答案不再有意义... :-)

请注意正则表达式具有不同的“风味” ...例如,JS风味与Perl的风味不同...可能您不能按原样使用JavaScript中的给定正则表达式,但您可能应该“烹饪”它以JS风格... :-)

另请参见此处此处 ,给出了(可能)更好的正则表达式:

^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$

关于这个有一些奇怪的地方。

首先,您发布的示例邮政编码实际上是四个邮政编码的组合:W1A 1HQ,EC1A 1BB,M1 1AA和B33 8TH。

其次,regexp是用与JavaScript中使用的不同的Dialext编写的(我不知道是哪一个)。 表达式[AZ-[IJZ]]可能表示“ IJZ以外的任何大写字母”。 在Javascript中,它的意思是“任何大写字母或-[后接a ] ”。 其中也有一些不必要的寄生。

我没有花时间修复正则表达式。 但是我删除了一些检查是否还有其他问题。 因此,此代码应匹配所有有效的邮政编码(以及许多无效的邮政编码):

/(GIR 0AA|[AZ][0-9][0-9]?|[AZ][AZ][0-9][0-9]?|[AZ][0-9][A-HJKSTUW]|[AZ][AZ][0-9][ABEHMNPRVWXY]) [0-9][AZ]{2}/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM