我希望能够验证英国邮编,最好的情况是以下案例都可以通过:
- 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})?$
(?<out>[A-Z]{1,2}(\d(?=\ ?\d[A-Z])|\d\d|\d[A-Z]?))\ ?(?<in>\d[A-Z]{0,2})?
- DigitalDan