私が見つけたアーカイブページによると、仕様は次のとおりです。
Pattern w/o space RLE General
AN NAA ANNAA A1 N2 A2 | A{1,2} N{2,3} A2
ANN NAA ANNNAA A1 N3 A2 |
AAN NAA AANNAA A2 N2 A2 |
AANN NAA AANNNAA A2 N3 A2 |
ANA NAA ANANAA A1 N1 A1 N1 A2 | A{1,2} N1 A1 N1 A2
AANA NAA AANANAA A2 N1 A1 N1 A2 |
GIR 0AA We are British and for every rule there must be an
equal and opposite exception.
たぶん、これはページの検証で煩わしいほど面倒です。変更があった場合は、それを維持する必要があることを忘れないでください。のような最小限のチェックを検討してください^[A-Z].+[0-9].+[A-Z]$
。「ヒーロー」にならないで、コードを定型化します。
その仕様に対して本当に検証したい場合、一般的なルール(空白を削除した後)は次のとおりです。
^([A-Z]{1,2})([0-9]{2,3})([A-Z]{2})$/i
^([A-Z]{1,2})([0-9])([A-Z])([0-9])([A-Z]{2})$/i
^GIR0AA$/i
@Stefanが指摘したように、大文字と小文字を区別しない場合は/i。
これを行ったら、グループを一致させ(したがって中括弧)、文字がドキュメント内の制限された範囲と一致することを確認できます。この時点で、郵便番号領域に許可されている1文字および2文字のコードのリストを維持することもできます。
インコード(スペースの前のチャンク)をアウトコード(スペースの後ろのチャンク)から分離するための一般的な規則は、アウトコードが最後の番号から始まることのようです(GIRの場合でも)。
率直に言って、私は基本的なチェックの後で気にするのをやめます。より完全な仕様に対して検証する価値がある場合は、郵便番号領域が存在することを確認する価値があります。それが価値がある場合は、郵便番号から住所を抽出する実際のサービスに接続することをお勧めします。これらのサービスは、郵便番号が存在しないことを喜んで通知します。これは、これまでに作成したいよりも堅牢で保守可能なチェックです。
[編集:もちろんウィキペディアには別の仕様があります]