8

我希望能够验证英国邮政编码,理想情况下,我希望通过以下案例:

  1. W1
  2. W12
  3. WC1
  4. WC1A
  5. WC12
  6. W1 6BT
  7. W12 6BT
  8. WC1 6BT
  9. WC1A 6BT
  10. WC12 6BT
  11. W16BT
  12. W126BT
  13. WC16BT
  14. WC1A6BT
  15. WC126BT

我有以下正则表达式模式:

^(GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|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)([2-9]|[1-9][0-9])|EC[1-9][0-9])( [0-9][ABD-HJLNP-UW-Z]{2})?)$

此模式允许使用 3 位或 4 位和 6 位或 7 位邮政编码(因此只有 3 位或 4 位的外向代码,或 6 位或 7 位的完整邮政编码)但是它不允许第 4 点和第 6 点(有空格的邮政编码被省略)

我也有这种模式:

^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKPS-UW]) {0,1}[0-9][ABD-HJLNP-UW-Z]{2})$

此模式允许使用 6 或 7 位邮政编码,我们没有空格,但不允许使用不完整的邮政编码(仅限外部代码)

很抱歉问了一个已经在这里广泛讨论的问题,但是我发现的所有示例都符合我的部分要求,但不是全部。

理想情况下,我想要一个允许 3、4、6 和 7 位邮政编码的正则表达式模式,并且没有空格。

更新:

我已经完成了我的通行证,因为我认为它最初并不全面。基本概念是它应该遵循英国邮政编码模式,并验证以下任何组合:

1 Letter 1 Number
1 Letter 2 Numbers
2 Letters 1 Number
2 Letters 1 Number 1 Letter
2 Letters 2 Numbers
1 Letter 1 Number (OptionalSpace) 1 Number 2 Letters
1 Letter 2 Numbers (OptionalSpace) 1 Number 2 Letters
2 Letters 1 Number (OptionalSpace) 1 Number 2 Letters
2 Letters 1 Number 1 Letter (OptionalSpace) 1 Number 2 Letters
2 Letters 2 Numbers (OptionalSpace) 1 Number 2 Letters

^ 希望以上内容有意义,并且足够详细。我知道有点难读。

回答:

所以我现在有一个正则表达式可以通过上述所有情况(示例和模式)。正如下面的评论中提到的,即使不是不可能,也很难满足所有英国邮政编码的要求,但是,下面的那个可以满足我的所有需要​​,并且应该适用于 90% 的输入案例:

^(GIR 0AA)|[a-z-[qvx]](?:\d|\d{2}|[a-z-[qvx]]\d|[a-z-[qvx]]\d[a-z-[qvx]]|[a-z-[qvx]]\d{2})(?:\s?\d[a-z-[qvx]]{2})?$
4

1 回答 1

7

您是否注意到相关问题UK Postcode Regex (Comprehensive)

英国政府提供的 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})

正如维基百科讨论中所指出的,这将允许一些非真实的邮政编码(例如那些以 AA、ZY 开头的邮政编码),并且它们确实提供了您可以尝试的更严格的测试。

于 2013-06-09T19:22:14.360 回答