2016-10-14 5 views
1

米国の郵便番号の正規表現が必要です。私は多くの例を見つけましたが、郵便番号もオプションであることを可能にするものはありません。あなたは、必要な入力フィールドにこれを使用していますので、有効なシナリオは5桁の郵便番号、5 + 4桁の郵便番号、または郵便番号が一切ありません。ここで私はこれまで持っているものですが、それは、シナリオ「全く郵便番号」には機能しません:米国郵便番号の正規表現ですが、オプションです。

^(\d{5}(?:\-\d{4})?)$ 
+0

'$': '^(?:\ d {4})の前に'? 'を挿入しますか?)$$ –

+0

なぜ角タグですか? –

+0

ヴェルナー - 私の間違いは、私は角2を使用していたと述べていたはずです。 – jle

答えて

5

あなたは非キャプチャオプションのグループで、パターン全体を囲む必要があります。

^(?:\d{5}(?:-\d{4})?)?$ 
^^^    ^^ 

regex demo

詳細を参照してください:

  • ^ - ストリング
  • (?:の開始 - オプションのグループの開始
    • \d{5}から5桁の数字
    • (?:-\d{4})?
    • - -と4桁の数字
  • )?に一致するオプションのグループ - 外側の任意の端グループ
  • $ - 文字列の最後。

外部非キャプチャグループをオプション(一致する1回または0回)にするのは?です。

パターンを短くしたい場合は、キャプチャグループを使用することもできますが、捕捉されたサブ値には興味がないので、キャプチャしないグループはここで使用するのが自然です。

+0

ここで注目すべき点は、angle2のバージョン2.0.2ではパターンバリデーターにバグがあり、フィールドがオプションであると考えられていてもそのフィールドを無効として扱うことがわかったということです入力は供給されなかった。 angular2 2.1.0にアップグレードするとこれが修正されました。皆さんありがとう。 – jle

関連する問題