英国邮政编码正则表达

Jus*_*ser 8 c# regex postal-code

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

  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})?)$
Run Code Online (Sandbox Code Playgroud)

此模式允许使用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})$
Run Code Online (Sandbox Code Playgroud)

这种模式允许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
Run Code Online (Sandbox Code Playgroud)

^希望上面有意义,并且足够详细.我知道,有点难以阅读.

回答:

所以我现在有一个正则表达式传递上面的所有情况(例子和模式).正如下面的评论中提到的那样,即使不是不可能满足所有英国邮政编码也是非常困难的,但是,下面的那个确实是我需要的,并且对于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})?$
Run Code Online (Sandbox Code Playgroud)

rek*_*ire 6

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

英国政府提供的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})
Run Code Online (Sandbox Code Playgroud)

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