英国の郵便番号を検証できるようにしたいと考えています。理想的には、次のケースに合格したいと考えています。
- 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})?$