我希望能够验证英国邮政编码,理想情况下,我希望通过以下案例:
我有以下正则表达式模式:
^(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和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})?$
答案 0 :(得分:6)
您是否注意到相关问题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开头),并且它们确实提供了一个你可以尝试的更严格的测试。