4

英国の郵便番号を検証する JavaScript 正規表現があります。うまく機能しますが、途中にスペースを入れて書く人とそうでない人がいることを考慮していません。これを追加しようとしましたが、うまくいきません:S 英国の郵便番号は主に 2 文字で、その後に 1 つまたは 2 つの数字、オプションの空白と 1 つの数字と 2 つの文字が続きます。

スペースなしで郵便番号を検証する私の正規表現は次のとおりです。

[A-PR-UWYZa-pr-uwyz0-9][A-HK-Ya-hk-y0-9][AEHMNPRTVXYaehmnprtvxy0-9]?[ABEHMNPRVWXYabehmnprvwxy0-9]?{1,2}[0-9][ABD-HJLN-UW-Zabd-hjln-uw-z]{2}|(GIRgir){3} 0(Aa){2})$/g

何か案は?

編集

1 つのグループで小文字が欠落していることに気付いたので、正規表現を変更しました。

4

5 に答える 5

6

別の解決策は、文字列からすべてのスペースを削除してから、既にある正規表現を実行することです。

var postalCode = '…';
postalCode = postalCode.replace(/\s/g, ''); // remove all whitespace
yourRegex.test(postalCode); // `true` or `false`
于 2012-06-18T11:56:08.383 に答える
6

2 文字の後に 1 つまたは 2 つの数字、オプションの空白、1 つの数字と 2 つの文字が続きます。

例:

/^[a-z]{2}\d{1,2}\s*\d[a-z]{2}$/i

http://www.myregextester.com/で説明

  ^                        the beginning of the string
----------------------------------------------------------------------
  [a-z]{2}                 any character of: 'a' to 'z' (2 times)
----------------------------------------------------------------------
  \d{1,2}                  digits (0-9) (between 1 and 2 times
                           (matching the most amount possible))
----------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  \d                       digits (0-9)
----------------------------------------------------------------------
  [a-z]{2}                 any character of: 'a' to 'z' (2 times)
----------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string
于 2012-06-18T11:51:59.897 に答える
3

私が見つけたアーカイブページによると、仕様は次のとおりです。

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の場合でも)。

率直に言って、私は基本的なチェックの後で気にするのをやめます。より完全な仕様に対して検証する価値がある場合は、郵便番号領域が存在することを確認する価値があります。それが価値がある場合は、郵便番号から住所を抽出する実際のサービスに接続することをお勧めします。これらのサービスは、郵便番号が存在しないことを喜んで通知します。これは、これまでに作成したいよりも堅牢で保守可能なチェックです。

[編集:もちろんウィキペディアには別の仕様があります]

于 2012-06-18T12:31:52.360 に答える
1

英国の郵便番号がどのように処理されているかわかりません。また、あなたの説明からも理解できませんでした。ちなみに、\s{0,1}「ここにスペースがあります」と言う必要がある場所を追加できます。「0または1のスペース」を意味します。

于 2012-06-18T11:45:49.793 に答える