郵便番号の正規表現


118

重複の可能性:
最終的な郵便番号と郵便番号の正規表現は何ですか?

郵便番号に関する3つの条件すべてを満たすことができるRegexが必要です。例えば-

  1. 12345
  2. 12345-6789
  3. 12345 1234

ご意見やご提案をいただければ幸いです。よろしくお願いします!


4
重複する閉鎖は大雑把に見えます-だまされた人はこれまでどの国からのどの郵便番号にも一致する正規表現を求めていますが、この質問は正規表現が郵便番号と一致するように求めています。範囲はデュープよりも狭いですが、実際にはデュープで答えが見つかります。米国を含む100を超える国のUnicode CLDR(古い、現在は非推奨ですが、おそらく多くの場合はまだ適切です)の郵便番号の正規表現を一覧表示するstackoverflow.com/a/7185241/1709587を参照してください。米国の正規表現は\d{5}([ \-]\d{4})?です。
マークアメリー

回答:


310
^\d{5}(?:[-\s]\d{4})?$
  • ^ =文字列の開始。
  • \d{5} = 5桁に一致(条件1、2、3の場合)
  • (?:…) =グループ化
  • [-\s] =スペース(条件3の場合)またはハイフン(条件2の場合)に一致
  • \d{4} = 4桁に一致(条件2、3の場合)
  • …? =その前のパターンはオプションです(条件1の場合)
  • $ =文字列の終わり。

7
\sタブや改行を含むすべての空白に一致します。
まぶたのない状態2010

1
こんにちは、スペースのない状態123451234についてはどうですか
Ajay Suwalka 2014年

4
@ProVega:リンクした(現在は削除されている)回答のコメントを読んでいるが、これは正しくないようです。たとえば、00544は有効な郵便番号です。544ではありません。
キース・トンプソン

2
@AjaySuwalka:スペースのない123451234に対応するために必要なことは、[-\ s]の後、次のようになります:^ \ d {5}(?:[-\ s]?\ d {4})?$
Grungondola

6
パーティーに少し遅れて、おそらくボールで最も美しいベルではないかもしれませんが、ハイフンの両側にオプションのスペースを追加しました。/(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel

4

上記の3つの条件の場合のみ、これらの式も機能する可能性があります。

^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$

追加の説明については、このデモを参照してください。

次のように、5桁と4桁の間に予期しない追加のスペースがあるか、9桁の連続した郵便番号がある場合は、

123451234
12345 1234
12345  1234

たとえば、この式は、制約の少ない2次オプションになります。

^\d{5}([-]|\s*)?(\d{4})?$

追加の説明については、このデモを参照してください。

RegEx回路

jex.imは正規表現を視覚化します。

ここに画像の説明を入力してください

テスト

const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = `12345
12345-6789
12345 1234
123451234
12345 1234
12345  1234
1234512341
123451`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}


0

これはRegExを頻繁に使用するほとんどの人にとって明白なことかもしれませんが、読者がRegExを初めて使用する場合は、私のプロジェクトの1つに役立つ観察結果を指摘する必要があると思いました。

@kennytmからの以前の回答では:

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

…?=その前のパターンはオプションです(条件1の場合)

標準の5桁と+4の両方の郵便番号を許可する場合、これは良い例です。

米国の「郵便番号+ 4」形式の郵便番号のみを一致させるには(条件2と3のみ)、最後を削除するだけで?常に最後の5文字グループと一致します。

RegExをいじるのに私がお勧めする便利なツールは以下にリンクされています。

https://regexr.com/

RegExが必要なものと似たようなものを見つけたとき、私はこのツールを頻繁に使用しますが、少し調整することができます。また、洗練されたRegEx参照メニューと、変更内容が入力したサンプルテキストの一致にどのように影響するかを把握できる有益なインターフェイスも備えています。

何か間違ったことをしたり、重要な情報を見逃したりした場合は、修正してください。


-またはあなたがこの正規表現のチュートリアル参照することができyoutube.com/watch?v=8uCHRyK_VMo
Krishnrajラナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.