究極の郵便番号とzip正規表現とは何ですか?


201

究極の郵便番号と郵便番号の正規表現を探しています。世界の大部分(できればすべて)をカバーできるものを探しています。


4
すべての郵便番号に対して単一の正規表現を使用しても、多くの場合、多くのUnicodeエンコードが必要であることは言うまでもなく、役に立たないでしょう。「ニューヨーク、ニューヨークAF23Q」のようなものを正しく検証しないように、国ごとに正規表現をチェックする方がはるかに良いでしょう。
はい-そのジェイク。

101
問題があります。あなたはそれのための正規表現を書きます。ここで2つの問題があります。
ロバートS.


2
可能なすべての将来の値を処理するもの。
Jodrell 2012年

回答:


127

なにもない。

世界中の郵便番号は、一般的なパターンに従っていません。国によっては、数字で構成されている場合もあれば、数字と文字の組み合わせである場合もあれば、スペースを含めることができる場合もあれば、ドットが含まれる場合もあります。

(理論的には)できることは、世界のすべての国に対して別々の正規表現を作成することであり、推奨されるIMOではありません。ただし、検証の部分はまだありません。郵便番号12345は存在する可能性がありますが、存在し12346ない可能性もあり12344ます。どのように正規表現でそれをチェックしますか?

できません。


正規表現はコンパイルできると思いますが、このようなタスクはデータベースにはるかに適しています。正規表現は、10000 | 10001 | 10002 | 10003 | .......のようになります
Kibbee

フィールドの検証については、こちらをご覧
Dinesh Kumar

あなたは、あなたの国と一致する最初の正規表現を使用します(参照することができますen.wikipedia.org/wiki/List_of_postal_codesを)などの外部サービスで、実際のチェックを行うgeonames.org/export/ws-overview.html
SimonSimCity

3
私の2セント:それはactualy 8つの数字であるブラジルでは、5はダッシュと3以上続く
ホルヘ・カンポス

^\d{5}(?:[-\s]\d{4})?$
アーミルアフリディ2017年

260

ユニコードCLDRには、各国の郵便番号の正規表現が含まれています。(計158の正規表現!)

Googleには、郵便番号を含む国ごとの住所フォーマット情報を含むWebサービスもあります-http://i18napis.appspot.com/addresshttp://unicode.org/review/pri180/を介してそのリンクを見つけました)

編集する

ここでpostalCodeData.xml regexのコピー:

"GB", "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}"
"JE", "JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"GG", "GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"IM", "IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}"
"US", "\d{5}([ \-]\d{4})?"
"CA", "[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d"
"DE", "\d{5}"
"JP", "\d{3}-\d{4}"
"FR", "\d{2}[ ]?\d{3}"
"AU", "\d{4}"
"IT", "\d{5}"
"CH", "\d{4}"
"AT", "\d{4}"
"ES", "\d{5}"
"NL", "\d{4}[ ]?[A-Z]{2}"
"BE", "\d{4}"
"DK", "\d{4}"
"SE", "\d{3}[ ]?\d{2}"
"NO", "\d{4}"
"BR", "\d{5}[\-]?\d{3}"
"PT", "\d{4}([\-]\d{3})?"
"FI", "\d{5}"
"AX", "22\d{3}"
"KR", "\d{3}[\-]\d{3}"
"CN", "\d{6}"
"TW", "\d{3}(\d{2})?"
"SG", "\d{6}"
"DZ", "\d{5}"
"AD", "AD\d{3}"
"AR", "([A-HJ-NP-Z])?\d{4}([A-Z]{3})?"
"AM", "(37)?\d{4}"
"AZ", "\d{4}"
"BH", "((1[0-2]|[2-9])\d{2})?"
"BD", "\d{4}"
"BB", "(BB\d{5})?"
"BY", "\d{6}"
"BM", "[A-Z]{2}[ ]?[A-Z0-9]{2}"
"BA", "\d{5}"
"IO", "BBND 1ZZ"
"BN", "[A-Z]{2}[ ]?\d{4}"
"BG", "\d{4}"
"KH", "\d{5}"
"CV", "\d{4}"
"CL", "\d{7}"
"CR", "\d{4,5}|\d{3}-\d{4}"
"HR", "\d{5}"
"CY", "\d{4}"
"CZ", "\d{3}[ ]?\d{2}"
"DO", "\d{5}"
"EC", "([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?"
"EG", "\d{5}"
"EE", "\d{5}"
"FO", "\d{3}"
"GE", "\d{4}"
"GR", "\d{3}[ ]?\d{2}"
"GL", "39\d{2}"
"GT", "\d{5}"
"HT", "\d{4}"
"HN", "(?:\d{5})?"
"HU", "\d{4}"
"IS", "\d{3}"
"IN", "\d{6}"
"ID", "\d{5}"
"IL", "\d{5}"
"JO", "\d{5}"
"KZ", "\d{6}"
"KE", "\d{5}"
"KW", "\d{5}"
"LA", "\d{5}"
"LV", "\d{4}"
"LB", "(\d{4}([ ]?\d{4})?)?"
"LI", "(948[5-9])|(949[0-7])"
"LT", "\d{5}"
"LU", "\d{4}"
"MK", "\d{4}"
"MY", "\d{5}"
"MV", "\d{5}"
"MT", "[A-Z]{3}[ ]?\d{2,4}"
"MU", "(\d{3}[A-Z]{2}\d{3})?"
"MX", "\d{5}"
"MD", "\d{4}"
"MC", "980\d{2}"
"MA", "\d{5}"
"NP", "\d{5}"
"NZ", "\d{4}"
"NI", "((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?"
"NG", "(\d{6})?"
"OM", "(PC )?\d{3}"
"PK", "\d{5}"
"PY", "\d{4}"
"PH", "\d{4}"
"PL", "\d{2}-\d{3}"
"PR", "00[679]\d{2}([ \-]\d{4})?"
"RO", "\d{6}"
"RU", "\d{6}"
"SM", "4789\d"
"SA", "\d{5}"
"SN", "\d{5}"
"SK", "\d{3}[ ]?\d{2}"
"SI", "\d{4}"
"ZA", "\d{4}"
"LK", "\d{5}"
"TJ", "\d{6}"
"TH", "\d{5}"
"TN", "\d{4}"
"TR", "\d{5}"
"TM", "\d{6}"
"UA", "\d{5}"
"UY", "\d{5}"
"UZ", "\d{6}"
"VA", "00120"
"VE", "\d{4}"
"ZM", "\d{5}"
"AS", "96799"
"CC", "6799"
"CK", "\d{4}"
"RS", "\d{6}"
"ME", "8\d{4}"
"CS", "\d{5}"
"YU", "\d{5}"
"CX", "6798"
"ET", "\d{4}"
"FK", "FIQQ 1ZZ"
"NF", "2899"
"FM", "(9694[1-4])([ \-]\d{4})?"
"GF", "9[78]3\d{2}"
"GN", "\d{3}"
"GP", "9[78][01]\d{2}"
"GS", "SIQQ 1ZZ"
"GU", "969[123]\d([ \-]\d{4})?"
"GW", "\d{4}"
"HM", "\d{4}"
"IQ", "\d{5}"
"KG", "\d{6}"
"LR", "\d{4}"
"LS", "\d{3}"
"MG", "\d{3}"
"MH", "969[67]\d([ \-]\d{4})?"
"MN", "\d{6}"
"MP", "9695[012]([ \-]\d{4})?"
"MQ", "9[78]2\d{2}"
"NC", "988\d{2}"
"NE", "\d{4}"
"VI", "008(([0-4]\d)|(5[01]))([ \-]\d{4})?"
"PF", "987\d{2}"
"PG", "\d{3}"
"PM", "9[78]5\d{2}"
"PN", "PCRN 1ZZ"
"PW", "96940"
"RE", "9[78]4\d{2}"
"SH", "(ASCN|STHL) 1ZZ"
"SJ", "\d{4}"
"SO", "\d{5}"
"SZ", "[HLMS]\d{3}"
"TC", "TKCA 1ZZ"
"WF", "986\d{2}"
"XK", "\d{5}"
"YT", "976\d{2}"

3
AU postcode-regexをすばやくスキャンするだけで...この正規表現は非常にシンプルであり、多くの誤検知を許容するため、完全ではありません。
Taryn East 2014

7
郵便番号の正規表現を含むユニコードCLDRの最新バージョンはバージョン26.0.1です。それ以降のバージョンでは、データが維持されておらず、他の信頼できるソースが見つからなかったため、削除されました。
KIKOソフトウェア

1
フランスの郵便番号の正規表現についても同じです。これを使用してください "^((0 [1-9])|([1-8] [0-9])|(9 [0-8])|(2A)|(2B))[0-9] {3} $」 - > developpez.net/forums/d518232/webmasters-developpement-web/...
ビンセントD.

現在i18napis.appspot.com/address/data/GBを使用しています。このサービスに問題はありますか?
mgol

1
@ kiko-softwareのコメントに対する小さな修正:郵便番号データを含む最新バージョンは27.0.3です。
Sietse 2016年

89

これらの正規表現を使用する

$ZIPREG=array(
    "US"=>"^\d{5}([\-]?\d{4})?$",
    "UK"=>"^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$",
    "DE"=>"\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b",
    "CA"=>"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$",
    "FR"=>"^(F-)?((2[A|B])|[0-9]{2})[0-9]{3}$",
    "IT"=>"^(V-|I-)?[0-9]{5}$",
    "AU"=>"^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$",
    "NL"=>"^[1-9][0-9]{3}\s?([a-zA-Z]{2})?$",
    "ES"=>"^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$",
    "DK"=>"^([D|d][K|k]( |-))?[1-9]{1}[0-9]{3}$",
    "SE"=>"^(s-|S-){0,1}[0-9]{3}\s?[0-9]{2}$",
    "BE"=>"^[1-9]{1}[0-9]{3}$",
    "IN"=>"^\d{6}$"
);

7
私が実際にOPに答えるために見たより良い試みの1つ。広告が多いほど遅くなるが、明確で明確なアプローチ。
Rob

3
国コードから正規表現の1つを選択するので、Robが提案するように追加しても遅くなりません。
Thomaschaaf 2014

2
2012年に投稿しました。
rybo111 2014年

@ rybo111チェックChi答え。
Giulio Caccin

5
@ ddunn801、パターンの検証と郵便番号の認証には(大きな)違いがあります。(少なくとも米国では)郵便番号は定期的に追加および削除されるため、コードの認証は桁違いに困難です。理想的な世界では、サービス(USPSなど)に送信する前に、クイックチェックを実行してパターンを検証し、メールアドレス全体を検証します(このようなサービスは有料です。悪いデータで価値を浪費するのは嫌です) )。悲しいかな、世界は理想からかけ離れています。
JBH 2017年

48
  1. すべての郵便番号システムはAZおよび/または0〜9のみを使用し、時にはスペース/ダッシュを使用します

  2. すべての国が郵便番号を使用しているわけではありません(例:ダブリン以外のアイルランド)。ただし、ここでは無視します。

  3. 最短の郵便番号形式は、シエラレオネで NN

  4. 最長はアメリカ領サモアです NNNNN-NNNNNN

  5. 1つのスペースまたはダッシュを許可する必要があります。

  6. スペースまたはダッシュで開始または終了しないでください

これは上記をカバーするはずです:

(?i)^[a-z0-9][a-z0-9\- ]{0,10}[a-z0-9]$

8
これは、あらゆる組み合わせの完全な検証ではなく、健全性チェック(おそらくOPが望んでいたもの)を提供する唯一の回答のようです。まさに私が欲しかったthx
Lukos

1
@GiulioCaccin H0H0H0は(子供たちがサンタクロースのふりをカナダのポストから手紙を取得するために使用します)有効なカナダの郵便番号であるが、それはそれは:)有効な顧客郵便番号だという意味ではありません
ニール・マクギガン

2
参考までに、アメリカ領サモアは郵便番号が1つしかないほど小さいので96799です
ナテルカン

5
私の意見では、これが唯一の良い答えです。たとえば、HTMLパターン属性の事前検証として広く使用できます。
Blackbam 2018年

2
これは、国ごとに正確に検証するのではなく、健全性チェックを行いたいだけの状況に適した答えだと思います。多くの努力なしで少しきれいなデータを持っているだけです-完全な安全が必要な場合、他の人が指摘するように、サードパーティのプラグイン/サービスが必要になるかもしれません。
Yo Ludke

17

1つの正規表現で全世界をカバーしようとすることは完全に可能ではなく、実現不可能または推奨されません。

自分のホーンを鳴らすのではなく、役立つと思われるかなり完全な正規表現をいくつか書きました。

  • カナダの郵便番号

    Basic validation:
    ^[ABCEGHJ-NPRSTVXY]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
    
    Extended validation:
    ^(A(0[ABCEGHJ-NPR]|1[ABCEGHK-NSV-Y]|2[ABHNV]|5[A]|8[A])|B(0[CEHJ-NPRSTVW]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGHJNRSTV-Z]|3[ABEGHJ-NPRSTVZ]|4[ABCEGHNPRV]|5[A]|6[L]|9[A])|C(0[AB]|1[ABCEN])|E(1[ABCEGHJNVWX]|2[AEGHJ-NPRSV]|3[ABCELNVYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTV]|6[ABCEGHJKL]|7[ABCEGHJ-NP]|8[ABCEGJ-NPRST]|9[ABCEGH])|G(0[ACEGHJ-NPRSTV-Z]|1[ABCEGHJ-NPRSTV-Y]|2[ABCEGJ-N]|3[ABCEGHJ-NZ]|4[ARSTVWXZ]|5[ABCHJLMNRTVXYZ]|6[ABCEGHJKLPRSTVWXZ]|7[ABGHJKNPSTXYZ]|8[ABCEGHJ-NPTVWYZ]|9[ABCHNPRTX])|H(0[HM]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRSTV-Z]|4[ABCEGHJ-NPRSTV-Z]|5[AB]|7[ABCEGHJ-NPRSTV-Y]|8[NPRSTYZ]|9[ABCEGHJKPRSWX])|J(0[ABCEGHJ-NPRSTV-Z]|1[ACEGHJ-NRSTXZ]|2[ABCEGHJ-NRSTWXY]|3[ABEGHLMNPRTVXYZ]|4[BGHJ-NPRSTV-Z]|5[ABCJ-MRTV-Z]|6[AEJKNRSTVWYXZ]|7[ABCEGHJ-NPRTV-Z]|8[ABCEGHLMNPRTVXYZ]|9[ABEHJLNTVXYZ])|K(0[ABCEGHJ-M]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-MPRSTVW]|4[ABCKMPR]|6[AHJKTV]|7[ACGHK-NPRSV]|8[ABHNPRV]|9[AHJKLV])|L(0[[ABCEGHJ-NPRS]]|1[ABCEGHJ-NPRSTV-Z]|2[AEGHJMNPRSTVW]|3[BCKMPRSTVXYZ]|4[ABCEGHJ-NPRSTV-Z]|5[ABCEGHJ-NPRSTVW]|6[ABCEGHJ-MPRSTV-Z]|7[ABCEGJ-NPRST]|8[EGHJ-NPRSTVW]|9[ABCGHK-NPRSTVWYZ])|M(1[BCEGHJ-NPRSTVWX]|2[HJ-NPR]|3[ABCHJ-N]|4[ABCEGHJ-NPRSTV-Y]|5[ABCEGHJ-NPRSTVWX]|6[ABCEGHJ-NPRS]|7[AY]|8[V-Z]|9[ABCLMNPRVW])|N(0[ABCEGHJ-NPR]|1[ACEGHKLMPRST]|2[ABCEGHJ-NPRTVZ]|3[ABCEHLPRSTVWY]|4[BGKLNSTVWXZ]|5[ACHLPRV-Z]|6[ABCEGHJ-NP]|7[AGLMSTVWX]|8[AHMNPRSTV-Y]|9[ABCEGHJKVY])|P(0[ABCEGHJ-NPRSTV-Y]|1[ABCHLP]|2[ABN]|3[ABCEGLNPY]|4[NPR]|5[AEN]|6[ABC]|7[ABCEGJKL]|8[NT]|9[AN])|R(0[ABCEGHJ-M]|1[ABN]|2[CEGHJ-NPRV-Y]|3[ABCEGHJ-NPRSTV-Y]|4[AHJKL]|5[AGH]|6[MW]|7[ABCN]|8[AN]|9[A])|S(0[ACEGHJ-NP]|2[V]|3[N]|4[AHLNPRSTV-Z]|6[HJKVWX]|7[HJ-NPRSTVW]|9[AHVX])|T(0[ABCEGHJ-MPV]|1[ABCGHJ-MPRSV-Y]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NPRZ]|4[ABCEGHJLNPRSTVX]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTVWX]|7[AENPSVXYZ]|8[ABCEGHLNRSVWX]|9[ACEGHJKMNSVWX])|V(0[ABCEGHJ-NPRSTVWX]|1[ABCEGHJ-NPRSTV-Z]|2[ABCEGHJ-NPRSTV-Z]|3[ABCEGHJ-NRSTV-Y]|4[ABCEGK-NPRSTVWXZ]|5[ABCEGHJ-NPRSTV-Z]|6[ABCEGHJ-NPRSTV-Z]|7[ABCEGHJ-NPRSTV-Y]|8[ABCGJ-NPRSTV-Z]|9[ABCEGHJ-NPRSTV-Z])|X(0[ABCGX]|1[A])|Y(0[AB]|1[A]))[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z]{1}[0-9]{1}$
  • 米国の郵便番号

    ^[0-9]{5}(-[0-9]{4})?$
  • 英国の郵便番号

    ^([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\ [0-9][ABD-HJLNP-UW-Z]{2}|(GIR\ 0AA)|(SAN\ TA1)|(BFPO\ (C\/O\ )?[0-9]{1,4})|((ASCN|BBND|[BFS]IQQ|PCRN|STHL|TDCU|TKCA)\ 1ZZ))$

実際に住所にメールを送って、受け取ったときに通知してもらうことなく精度を保証することはできませんが、悪いとわかっているケースを排除することで、絞り込みを行うことができます。


カナダの郵便番号の拡張バージョンには、次の郵便番号は無効であると記載されているため、何かが間違っているか欠落している可能性があります。E3G0A1は有効です。
fsschmitt 2015年

カナダのすべての845,495郵便番号に対して検証を行いましたが、この正規表現文字列には、これらの郵便番号すべてをサポートするための拡張検証に関するいくつかの修正が含まれています。ここでは、カナダの郵便番号コードの拡張検証のための新たな正規表現の文字列です:pastebin.com/vazqFKy4
fsschmitt

14

Regexにはありませんが、これは良いリファレンスのように見えます。

実際、ユーザーに実際に何かを出荷しているのでなければ、努力する価値はないと思います。それ発送する場合、自分で簡単にできるように調査できるアドレスクリーニングツール/サービスがあります。


また、現在の郵便番号が正しい場合でも、将来的に変更される可能性があります。USPSは常に新しいものを追加し、エリアを分割しています。対処できる唯一の方法は、実際に何かを出荷しているときに検証することです。いくつかの町では、さまざまな理由で郵便番号を変更することを選択しています。
NotMe 2010

-誰かのように見えますが、それぞれの国のために郵便/郵便番号の正規表現でJSONにウィキあなたは上記の投稿記事と出力それを取ったgist.github.com/matthewbednarski/...
クリス・スミス

8

以下を使用します。

カナダ

([A-Z]{1}[0-9]{1}){3}   //We raise to upper first

アメリカ

[0-9]{5}                //-or-
[0-9]{5}-[0-9]{4}       //10 digit zip

その他の

そのまま受け入れる


1
オプションの-[0-9] {4}を米国のものに追加することをお勧めします。一部の人々は、ZIP + 4を使用しています。
David Thornley、

4
/ [0-9] {5}(?:-[0-9] {4})?/では、米国の両方のスタイルを同時に検証できます。
Chas。オーウェンズ

2
@ Chas.Owensが^と$を追加すると、「12345aaa」のように前後に他の文字を入力できないようになります... / ^ [0-9] {5}(?:-[0-9] {4}) ?$ /
Tim Franklin

7

アプリケーションによっては、ほとんどの訪問者が発生する国に対して正規表現マッチングを実装し、残りの部分については検証を行わないこともできます(何でも受け入れます)。


6
.* 

ビッグジャンプは、改行、空白、制御文字を忘れていました。

国際郵便番号は一種の停止問題です。


6

受け入れられた回答で述べられているように、これはかなり難しい問題であることに注意してください。それでもgeonames.orgの人々を抑止しなかったと思います。彼らはファイル国情報ファイルを持っています、これはこの回答に完全に適合しません-制限は明らかに30000文字です。約150か国の正規表現があります。

私はこの質問に関連するビットをここに抽出しました:

AD ^(?:AD)*(\d{3})$
AM ^(\d{6})$
AR ^([A-Z]\d{4}[A-Z]{3})$
AT ^(\d{4})$
AU ^(\d{4})$
AX ^(?:FI)*(\d{5})$
AZ ^(?:AZ)*(\d{4})$
BA ^(\d{5})$
BB ^(?:BB)*(\d{5})$
BD ^(\d{4})$
BE ^(\d{4})$
BG ^(\d{4})$
BH ^(\d{3}\d?)$
BM ^([A-Z]{2}\d{2})$
BN ^([A-Z]{2}\d{4})$
BR ^(\d{8})$
BY ^(\d{6})$
CA ^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]) ?(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$
CH ^(\d{4})$
CL ^(\d{7})$
CN ^(\d{6})$
CR ^(\d{4})$
CU ^(?:CP)*(\d{5})$
CV ^(\d{4})$
CX ^(\d{4})$
CY ^(\d{4})$
CZ ^(\d{5})$
DE ^(\d{5})$
DK ^(\d{4})$
DO ^(\d{5})$
DZ ^(\d{5})$
EC ^([a-zA-Z]\d{4}[a-zA-Z])$
EE ^(\d{5})$
EG ^(\d{5})$
ES ^(\d{5})$
ET ^(\d{4})$
FI ^(?:FI)*(\d{5})$
FM ^(\d{5})$
FO ^(?:FO)*(\d{3})$
FR ^(\d{5})$
GB ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
GE ^(\d{4})$
GF ^((97|98)3\d{2})$
GG ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
GL ^(\d{4})$
GP ^((97|98)\d{3})$
GR ^(\d{5})$
GT ^(\d{5})$
GU ^(969\d{2})$
GW ^(\d{4})$
HN ^([A-Z]{2}\d{4})$
HR ^(?:HR)*(\d{5})$
HT ^(?:HT)*(\d{4})$
HU ^(\d{4})$
ID ^(\d{5})$
IL ^(\d{5})$
IM ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
IN ^(\d{6})$
IQ ^(\d{5})$
IR ^(\d{10})$
IS ^(\d{3})$
IT ^(\d{5})$
JE ^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$
JO ^(\d{5})$
JP ^(\d{7})$
KE ^(\d{5})$
KG ^(\d{6})$
KH ^(\d{5})$
KP ^(\d{6})$
KR ^(?:SEOUL)*(\d{6})$
KW ^(\d{5})$
KZ ^(\d{6})$
LA ^(\d{5})$
LB ^(\d{4}(\d{4})?)$
LI ^(\d{4})$
LK ^(\d{5})$
LR ^(\d{4})$
LS ^(\d{3})$
LT ^(?:LT)*(\d{5})$
LU ^(\d{4})$
LV ^(?:LV)*(\d{4})$
MA ^(\d{5})$
MC ^(\d{5})$
MD ^(?:MD)*(\d{4})$
ME ^(\d{5})$
MG ^(\d{3})$
MK ^(\d{4})$
MM ^(\d{5})$
MN ^(\d{6})$
MQ ^(\d{5})$
MT ^([A-Z]{3}\d{2}\d?)$
MV ^(\d{5})$
MX ^(\d{5})$
MY ^(\d{5})$
MZ ^(\d{4})$
NC ^(\d{5})$
NE ^(\d{4})$
NF ^(\d{4})$
NG ^(\d{6})$
NI ^(\d{7})$
NL ^(\d{4}[A-Z]{2})$
NO ^(\d{4})$
NP ^(\d{5})$
NZ ^(\d{4})$
OM ^(\d{3})$
PF ^((97|98)7\d{2})$
PG ^(\d{3})$
PH ^(\d{4})$
PK ^(\d{5})$
PL ^(\d{5})$
PM ^(97500)$
PR ^(\d{9})$
PT ^(\d{7})$
PW ^(96940)$
PY ^(\d{4})$
RE ^((97|98)(4|7|8)\d{2})$
RO ^(\d{6})$
RS ^(\d{6})$
RU ^(\d{6})$
SA ^(\d{5})$
SD ^(\d{5})$
SE ^(?:SE)*(\d{5})$
SG ^(\d{6})$
SH ^(STHL1ZZ)$
SI ^(?:SI)*(\d{4})$
SK ^(\d{5})$
SM ^(4789\d)$
SN ^(\d{5})$
SO ^([A-Z]{2}\d{5})$
SV ^(?:CP)*(\d{4})$
SZ ^([A-Z]\d{3})$
TC ^(TKCA 1ZZ)$
TH ^(\d{5})$
TJ ^(\d{6})$
TM ^(\d{6})$
TN ^(\d{4})$
TR ^(\d{5})$
TW ^(\d{5})$
UA ^(\d{5})$
US ^\d{5}(-\d{4})?$
UY ^(\d{5})$
UZ ^(\d{6})$
VA ^(\d{5})$
VE ^(\d{4})$
VI ^\d{5}(-\d{4})?$
VN ^(\d{6})$
WF ^(986\d{2})$
YT ^(\d{5})$
ZA ^(\d{4})$
ZM ^(\d{5})$
CS ^(\d{5})$

うまくいけば、私は間違いを犯さなかった、私の正規表現fuはかなり弱い。


1
フランスとイギリスの正規表現は可能なスペースを考慮に入れていないことを指摘しておきたい。フランスでは、郵便番号は2桁目と3桁目の間にスペースを入れて入力できます(つまり、75001ではなく75 001)。イギリスの郵便番号は、スペースで書かれていることがよくあります(つまり、SW11AAではなくSW1 1AA)。
salcoin

@salcoin入力をありがとう、私はそれに気付きませんでした(私はフランス人ですが)。この点では、Chiの答えの方が良いようです。
nha

スペースのないスペースをstr_replaceするのは大変な負担ですよね?:p
Robert Pounder 2016

6

誰かが郵便番号を検証する方法にまだ興味がある場合、私は解決策を見つけました:

を使用しGoogle Geocoding APIて、国コード郵便番号自体の両方を持つ郵便番号の有効性を確認できます。

たとえば、私はウクライナに住んでいるので、次のように確認できますhttps : //maps.googleapis.com/maps/api/geocode/json?components=postal_code : 80380|country : UA

またはJS APIを使用:https : //developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering

80380ウクライナの有効なZIPはどこですか、実際にはすべての(#####)が有効です。

ZERO_RESULTS何も見つからない場合、Googleはステータスを返します。またはOK、両方が正しい場合は結果。

これがお役に立てば幸いです。


唯一の問題はクエリの数の制限であり、サイト/サイズによっては問題になる可能性があります。
ダリルハイン2015年

もちろん、@ DarrylHeinですが、これを機能させるにはかなりの高額になります=)
Romko

4

他の人が指摘したように、それらすべてを統治する1つの正規表現はありそうもない。ただし、あまり知られていない国連機関であるUniversal Postal Unionの住所フォーマット情報を使用して、必要な数の国の正規表現を作成できます。

たとえば、いくつかの国向けの郵便番号を含む住所フォーマットルールは次のとおりです(PDF形式)。


2

問題は、おそらく地球の反対側の国の郵便番号要件の変化に遅れずについていくための適切な手段がなく、共通言語を共有していないことです。これを追跡するのに十分な予算がない限り、ほとんどの場合、googleまたはyahooにアドレスを検証する責任を与える方がベターです。

どちらの会社も、プログラム可能なAPIを通じてアドレス検索機能を提供しています。


1

なぜこれをしているのか、なぜ気にしているのですか?Tom Ritterが指摘したように、実際にそのアドレスに何かを送信するまでは、ZIP /郵便番号があったとしても、それが有効であるかどうかは問題ではありません。いつか何かを送ると思っていても、今日の郵便番号が必要なわけではありません。


ええ、でも彼らがそれを入力するつもりなら、その時点でそれが正しいことを確認することもできます。ただし、基本的には他の回答の1つに同意し、顧客の過半数になると思われる国に対してそれを検証するようにします。
cdmckay 2009

1
一部のクレジット決済機関は、郵便番号が正しくない場合、請求書を受け入れません。請求を送信して却下するのではなく、入力時にzipを検証します。
SamGoody 2012年

1

他の場所で述べたように、世界中の変動は巨大です。そして、パターンに一致するものがあるとしても、それが存在するとは限りません。

そしてもちろん、郵便番号が使用されていない場所がたくさんあります(例:多くまたはアイルランド)。


実際、D1、D2などは適切な郵便番号とは考えられないので、このコードと番地だけでは住所を識別できないため、おそらくアイルランド全体が適切な郵便番号と見なされます。
ドナル

1

正確な郵便番号を持つことには、出荷以外にも理由があります。国境を越えるツアーを行う旅行代理店(もちろんヨーロッパを除く)は、当局に事前にこの情報を提供する必要があります。多くの場合、この情報は、そのようなことをよく知っているかどうかわからないエージェントによって入力されます。ミスを減らすことができる方法はすべてGood Idea™です

しかし、世界中のすべての郵便番号をカバーする正規表現を書くのは、正気ではないでしょう。


1
バグがあるか、郵便番号が変更されたために、コードが有効な郵便番号を拒否し始めるまでは、それは良いアイデアです。検証は、正しいか、まったくないかのどちらかでなければなりません。少なくとも、上書きオプションが必要です。
Chas。オーウェンズ

1

各国には非常に多くのエッジケースがあるため(たとえば、ロンドンの住所は他の英国とは少し異なる形式を使用している場合があります)、最終的に次の正規表現はないと思います。

[0-9a-zA-Z]+

かなり広いパターン(上記ほど広くはありません)を使用するか、各国/地域を独自の特定のパターンで扱うのが最善です。

更新: ただし、多くの小さい、地域固有のルールに基づいて動的に正規表現を構築することは可能かもしれません-パフォーマンスについては不明です!

国固有のパターンの多くは、RegExLibサイトで見つけることができます。


1

誰かがメールアドレスのフォーマットのリストについて尋ねていました、そして私はこれが彼が探していたものだと思います...

Frankの強迫的な郵便アドレスガイド:http : //www.columbia.edu/~fdc/postal/ ただし、ストリートレベルの問題にはあまり役立ちません。

私の仕事では、これを支援するためにいくつかのツールを使用しています。


1

これは、米国の郵便番号を検証するための非常に単純なRegExです(ZipCode Plus Fourではありません)。

(?!([089])\1{4})\d{5}

5桁の数値はすべて0000088888&と&を除く有効な郵便番号です99999

このRegExをhttp://regexpal.com/でテストしました

SP


このRegExは、zip + 4部分に4桁を強制しません。たとえば、「92122-1」を有効な郵便番号と見なします。
ジェームズ先生

0

Zip Code文字と数字(英数字)が許可されている場合、以下の正規表現が一致する場所で使用されます。5または9または10の英数字と1つのハイフン(-):

^([0-9A-Za-z]{5}|[0-9A-Za-z]{9}|(([0-9a-zA-Z]{5}-){1}[0-9a-zA-Z]{4}))$
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.