我希望能够验证英国邮政编码,理想情况下,我希望通过以下案例:
- 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 位邮政编码的正则表达式模式,并且没有空格。
更新:
我已经完成了我的通行证,因为我认为它最初并不全面。基本概念是它应该遵循英国邮政编码模式,并验证以下任何组合:
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})?$