[英]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]]
可能表示“ I
, J
和Z
以外的任何大写字母”。 在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.