英国邮政编码正则表达

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

  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个数字的邮政编码,我们没有空格。

更新:

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

 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)|[az-[qvx]](?:\d|\d{2}|[az-[qvx]]\d|[az-[qvx]]\d[az-[qvx]]|[az-[qvx]]\d{2})(?:\s?\d[az-[qvx]]{2})?$ 

您是否注意到相关问题英国邮政编码正则表达式(综合) ?

英国政府提供的RegEx是:

 (GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][AZ-[CIKMOV]]{2}) 

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