首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于匹配英国邮政编码的RegEx

用于匹配英国邮政编码的RegEx
EN

Stack Overflow用户
提问于 2008-10-02 23:05:04
回答 30查看 237.5K关注 0票数 219

我正在寻找一个正则表达式,将验证一个完整的复杂的英国邮政编码只在一个输入字符串。所有不常见的邮政编码表格都必须像往常一样覆盖。例如:

匹配

0EG

  • SE50EG

  • se5 0EG
  • CW3 9SS
  • SE5
  • WC2H 7LT

不匹配

7LTa

  • WC2H

  • aWC2H 7LT
  • WC2H

我该如何解决这个问题?

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2008-10-02 23:13:26

我建议看看英国政府的邮政编码数据标准[链接现已死亡;archive of XML,请参阅Wikipedia进行讨论]。这里有一个关于数据的简短描述,所附的xml模式提供了一个正则表达式。这可能不是你想要的,但这将是一个很好的起点。RegEx与XML略有不同,因为按照给定的定义,格式A9A 9AA中第三个位置的P字符是允许的。

英国政府提供的RegEx是:

代码语言:javascript
运行
复制
([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开头的邮政编码),它们确实提供了一个更严格的测试,你可以尝试一下。

票数 242
EN

Stack Overflow用户

发布于 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,它提供了邮政编码规则的“伪正则表达式”语句。

我们对它做了一些修改,得到了下面的表达式:

代码语言:javascript
运行
复制
^((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,}”以表示无限制的空格)。它假定所有文本都必须是大写的。

如果您希望允许使用小写,且具有任意数量的空格,请使用:

代码语言:javascript
运行
复制
^(([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}))$

这不包括海外地区,只强制执行格式,而不是不同地区的存在。它基于以下规则:

可以接受以下格式:

  • “GIR 0AA”
  • A9 9ZZ
  • A99 9ZZ
  • AB9 9ZZ

<代码>H114AB99 9ZZ<代码>H215<代码>H116A9C 9ZZ<代码>H217<代码>H118AD9E 9ZZ<代码>H219<代码>F220

其中:

  • 9可以是任何单个数字。
  • A可以是除Q、V或X之外的任何字母。
  • B可以是除I、J或Z以外的任何字母。
  • C可以是除I、L、M、N、O、P、Q、R、V、X、Y或Z以外的任何字母。
  • D可以是除I、J或Z以外的任何字母。
  • E可以是A、B、E、H、M、N、P、R、V、W、X或Y。
  • Z可以是除C、I、K、M、O或V之外的任何字母。

谨致问候

科林

票数 86
EN

Stack Overflow用户

发布于 2008-10-02 23:12:54

代码语言:javascript
运行
复制
^([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

http://regexlib.com/REDetails.aspx?regexp_id=260

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/164979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档