英国邮政编码正则表达
我希望能够validation英国邮政编码,理想情况下,我希望通过以下案例:
- W1
- W12
- WC1
- WC1A
- WC12
- W1 6BT
- W12 6BT
- WC1 6BT
- WC1A 6BT
- WC12 6BT
- W16BT
- W126BT
- WC16BT
- WC1A6BT
- 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开头)并且它们确实提供了一个你可以尝试的更严格的测试。