英国邮政编码的正则表达式

时间:2014-05-15 13:23:50

标签: regex

我使用以下javascript检查英国邮政编码是否有效

var postcodeRegEx = /[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}/i; 
if(postcodeRegEx.test($("#postcode").val())) { ... }

这适用于我所解雇的大多数邮政编码,但由于某些原因,WC2F 3BT不会返回true。

任何了解regexbetter的人都可以解释问题是什么以及我如何解决它?

6 个答案:

答案 0 :(得分:1)

/[A-Z]{1,2}[0-9]{1,2}[A-Z]?\s?[0-9][A-Z]{2}/i

你错过了一封可选的信件,这就是为什么它不起作用。你的原始正则表达式正在寻找一到两个字母。接下来是两个可能用空格分隔的数字。

答案 1 :(得分:1)

如果您想了解特定正则表达式的内容,有很多有用的在线工具可以帮到您,我的个人偏好是http://regex101.com

正则表达式的具体问题是它假设所有邮政编码都由一个/两个字母组成,后跟一个/两个数字,然后是一个数字后跟两个字母。

然而事实并非如此,详见维基百科UK Postcodes的文章:

  

'向外' part首先标识邮政编码区域,使用一个或   两个字母(例如L代表利物浦,RH Redhill和EH   爱丁堡)。邮政区域可以覆盖广泛的区域,例如RH覆盖物   北苏塞克斯,与Redhill在历史上几乎没有什么关系   从铁路连接,贝尔法斯特(BT)覆盖整个北部   爱尔兰。这些字母后跟一个或两个数字(和   有时是最后一封信,以确定适当的邮政编码   区(例如W1A,RH1,RH10或SE1P)

'向外' part表示邮政编码的前半部分。

因此,为了涵盖所有有效的英国邮政编码,您需要添加一个可选的字母组件,如您已收到的其他答案中详述的那样,复制@ Martyn关于此答案完整性的建议:

/[A-Z]{1,2}[0-9]{1,2}[A-Z]?\s?[0-9][A-Z]{2}/i

答案 2 :(得分:1)

根据HTML5Pattern.com,英国邮政编码是:

[A-Za-z]{1,2}[0-9Rr][0-9A-Za-z]? [0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}

答案 3 :(得分:0)

/[A-Z]{2}\d[A-Z]?\s?\d[A-Z]{2}/i

这应该匹配:

WC1E 7BT
CW3 9SS
SE5 0EG
SE50EG
se5 0eg

答案 4 :(得分:0)

但请记住,一些英国邮政编码在第一部分只有一个字母(例如N1 7TE)。 所以[A-Z] {2}需要是[A-Z] {1,2}。

答案 5 :(得分:0)

这是一个全面的,涵盖伦敦中央邮政编码以及标准X[X]n[n] nXX邮政编码。 (来自Expresso Regex工具库)。

\b([A-Z]{1,2}\d[A-Z]|[A-Z]{1,2}\d{1,2})\ +\d[A-Z-[CIKMOV]]{2}\b