我正在使用表单验证插件并使用正则表达式来验证英国邮政编码。我正在使用This reference正则表达式,其中作者说它可以验证所有邮政编码。但是当我尝试提交表单时,对于每种字符串,它都表示无效。我尝试了以下内容(样本取自维基百科Here is page
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
});
});
任何人都可以帮助我解决这段代码的错误
答案 0 :(得分:0)
如果没有深入检查正则表达式代码,我可以看到它与任何空格都不匹配(如果不是在第一个块和最后一个......):你是否可能需要从邮政编码中删除空格(& #34; W1A 1HQ EC1A 1BB M1 1AA B33 8TH
"在你的测试用例中,如果我理解正确的话)在匹配正则表达式之前?
更新:OP确实纠正了问题(测试代码中有4个不同的...),所以我的上述答案不再有任何意义......: - )< / p>
请注意regexp有不同的口味&#34; ...例如,JS风味与Perl的不同......可能你不能在JavaScript中使用给定的regexp &#39; as-is&#39;,但你可能应该&#34;做饭&#39;它在JS风味......: - )
另请参阅here和here,其中给出了(可能)更好的正则表达式:
^(([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}))$
答案 1 :(得分:0)
有一些奇怪的事情。
首先,您发布的示例邮政编码实际上是四个邮政编码的串联:W1A 1HQ,EC1A 1BB,M1 1AA和B33 8TH。
其次,regexp是用与JavaScript中使用的不同的透明文本编写的(我不知道哪一个)。表达式[A-Z-[IJZ]]
可能意味着&#34;除I
,J
和Z
&#34;以外的任何大写字母。在Javascript中,它表示&#34;任何大写字母或-
或[
后跟]
&#34;。还有一些不必要的parantheses。
我没有花时间修复正则表达式。但是我删除了一些位来检查是否还有其他问题。所以这个应该匹配所有有效的邮政编码(以及许多无效的邮编):
/(GIR 0AA|[A-Z][0-9][0-9]?|[A-Z][A-Z][0-9][0-9]?|[A-Z][0-9][A-HJKSTUW]|[A-Z][A-Z][0-9][ABEHMNPRVWXY]) [0-9][A-Z]{2}/