使用正则表达式验证英国邮政编码

Posted

技术标签:

【中文标题】使用正则表达式验证英国邮政编码【英文标题】:Validating UK Post Codes using regular expressions 【发布时间】:2011-03-28 18:12:24 【问题描述】:

我想使用英国邮政编码验证字段。可以使用什么正则表达式来验证该字段? (([A-Z]1,2[0-9][0-9A-Z]0,1)\ ([0-9][A-Z]2))|(GIR\ 0AA)$ 看起来确实有效,因为它有异常 GIR 0AA

所以,请帮我写一个表达式,没有任何例外

【问题讨论】:

如果确实如此,这突然变得更有意义了。带有字母的 PIN 码似乎不太可能(至少在没有任何进一步信息的情况下)。 尝试无例外地验证邮政编码是没有意义的……因为邮政编码系统中的正常规则有一个例外。 @David,鉴于有很多警告,尝试使用正则表达式验证邮政编码没有多大意义。在咨询PAF 之前,它可以 用于进行首次测试。 【参考方案1】:

如果您指的是邮政编码,wikipedia has a section on validation。它推荐的一种正则表达式是:

((A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|([E|N|NW|SE|SW|W]1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|[SW|W]([1-9][0-9]|[2-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]2

这个的好处是可以捕捉到一些无效的区域和区。

【讨论】:

【参考方案2】:

旁注: GIR 0AA 在您的常规中被列为例外 表达式,因为它是有效的英国 post code 本质上是什么 历史原因(在 ***的文章,它给出了 特别提及)。

您无法编写简单的正则表达式来验证英国邮政编码,因为无法确定 GU78 2AB 是否有效(GU78 向外区域可能仅包含 2AA,但不是 2AB),而 GU77 2AB 可能被认为是有效的。

您可以使用正则表达式来验证一段文本的形式和结构,以确定它是否符合被视为邮政编码的要求。我相信,从广义上讲,以下正则表达式将满足:

(([A-Z]1,2[0-9]1,2)\ ([0-9][A-Z]2))|(GIR\ 0AA)$

【讨论】:

感谢您的回复,这对我帮助很大,我认为这是一个例外,现在我明白这意味着【参考方案3】:
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? 1,2[0-9][ABD-HJLN-UW-Z]2|GIR 0AA)$

【讨论】:

以上是关于使用正则表达式验证英国邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

C# - 英国邮政编码正则表达式没有按预期工作?

使用正则表达式识别英国邮政编码中的模式

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

正则表达式匹配英国邮政编码的前半部分

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

ActionScript 3 AS3使用正则表达式检查并返回有效的英国邮政编码