我正在寻找一个正则表达式,将验证一个完整的复杂的英国邮政编码只在一个输入字符串。所有不常见的邮政编码表格都必须像往常一样覆盖。例如:
与匹配
0EG
不匹配
7LTa
我该如何解决这个问题?
发布于 2008-10-02 23:13:26
我建议看看英国政府的邮政编码数据标准[链接现已死亡;archive of XML,请参阅Wikipedia进行讨论]。这里有一个关于数据的简短描述,所附的xml模式提供了一个正则表达式。这可能不是你想要的,但这将是一个很好的起点。RegEx与XML略有不同,因为按照给定的定义,格式A9A 9AA中第三个位置的P字符是允许的。
英国政府提供的RegEx是:
([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\s?[0-9][A-Za-z]{2})
正如维基百科讨论中指出的,这将允许一些非真实的邮政编码(例如,那些以AA,ZY开头的邮政编码),它们确实提供了一个更严格的测试,你可以尝试一下。
发布于 2011-08-31 23:02:36
看起来我们将使用^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$
,这是上面Minglis建议的一个稍微修改过的版本。
然而,我们必须确切地调查规则是什么,因为上面列出的各种解决方案似乎应用了不同的规则,即允许哪些字母。
经过一些研究,我们发现了更多的信息。显然,“govtalk.gov.uk”上的一个页面指向一个邮政编码规范govtalk-postcodes。这指向了XML Schema上的一个XML schema,它提供了邮政编码规则的“伪正则表达式”语句。
我们对它做了一些修改,得到了下面的表达式:
^((GIR &0AA)|((([A-PR-UWYZ][A-HK-Y]?[0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y]))) &[0-9][ABD-HJLNP-UW-Z]{2}))$
这将使空格成为可选的,但会将您限制为一个空格(将“&”替换为“{0,}”以表示无限制的空格)。它假定所有文本都必须是大写的。
如果您希望允许使用小写,且具有任意数量的空格,请使用:
^(([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}))$
这不包括海外地区,只强制执行格式,而不是不同地区的存在。它基于以下规则:
可以接受以下格式:
<代码>H114AB99 9ZZ<代码>H215<代码>H116A9C 9ZZ<代码>H217<代码>H118AD9E 9ZZ<代码>H219<代码>F220
其中:
谨致问候
科林
发布于 2008-10-02 23:12:54
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$
匹配有效英国邮政编码的
正则表达式。在英国的邮政系统中,并不是所有的字母都用在所有的位置上(车辆牌照也是如此),并且有各种各样的规则来管理这一点。此正则表达式考虑了这些规则。规则详情:前半部分邮政编码有效格式A-Z0-9 A-Z0-9 A-Z0-9A-Z A-ZA-ZA-Z0-9 A-Z例外位置优先。Contraint QVX未使用位置-秒。Contraint IJZ不使用,除非在GIR 0AA位置-第三。Constraint - AEHMNPRTVXY仅使用Position - Forth。限制- ABEHMNPRVWXY邮政编码的后半部分有效格式0-9A-Z例外位置-第二和第三。Contraint未使用CIKMOV
https://stackoverflow.com/questions/164979
复制相似问题