Що таке кінцевий поштовий індекс та поштовий індекс?


200

Я шукаю остаточний поштовий індекс та поштовий індекс. Я шукаю те, що охопить більшість (сподіваюся, весь) світу.


4
Один єдиний регулярний гекс для всіх поштових індексів був би непридатним у більшості випадків, не кажучи вже про те, що потрібно багато кодування унікодом. Набагато краще перевірити регулярні вирази для кожної країни, щоб ви не перевіряли речі типу "Нью-Йорк, Нью-Йорк AF23Q" як правильність.
Так - той Джейк.

101
У вас проблема. Ви пишете для нього регулярний вираз. Зараз у вас є дві проблеми.
Роберт С.

regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100 для перевірки поля перейдіть сюди
Дінеш Кумар

2
Той, що обробляє всі можливі майбутні цінності.
Джодрелл

Відповіді:


126

Немає жодної.

Поштові та поштові індекси у всьому світі не відповідають загальній схемі. В деяких країнах вони складаються цифрами, в інших вони можуть бути комбінаціями цифр, буквою, в одних можуть містити пробіли, в інших точках, кількість символів може змінюватися від двох до принаймні шести ...

Те, що ви могли б зробити (теоретично), це створити окремий вираз для кожної країни світу, який не рекомендується IMO. Але ви все одно не будете бракувати в частині перевірки: Поштовий індекс 12345може існувати, але 12346ні, можливо12344 і його немає. Як ви перевірите це за допомогою регулярного вираження?

Ви не можете.


Я підозрюю, що може бути скомплектований регулярний вираз, але таке завдання набагато краще підходить до бази даних. Регекс виглядатиме приблизно як 10000 | 10001 | 10002 | 10003 | .......
Kibbee

для перевірки поля перейдіть сюди regexlib.com/Search.aspx?k=decimal&c=3&m=-1&ps=100
Дінеш Кумар

Ви можете спочатку скористатися регулярним виразом, який відповідає вашій країні (див. En.wikipedia.org/wiki/List_of_postal_codes ) і здійснити реальну перевірку зовнішньою службою, наприклад geonames.org/export/ws-overview.html
SimonSimCity,

3
Мої два центи: у Бразилії це фактично 8 чисел, 5 - за тире і ще 3
Хорхе Кампос

^\d{5}(?:[-\s]\d{4})?$
Аамір Африді

260

Унікод CLDR містить регулярний вираз поштового індексу для кожної країни. (Загалом 158 регексів!)

Google також має веб-службу з інформацією про форматування адрес для кожної країни, включаючи поштові індекси, тут - http://i18napis.appspot.com/address (я знайшов це посилання через http://unicode.org/review/pri180/ )

Редагувати

Ось копія регулярного виразу dax.Dota.xml :

"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 ... цей регулярний вираз дуже простий і дозволить пропустити безліч хибних позитивних результатів, тому це не є вичерпним.
Taryn East

7
Остання версія Unicode CLDR, що містить регекс поштового індексу, - це версія 26.0.1. У більш пізніх версіях він був видалений, оскільки дані не підтримувались та не було знайдено інших надійних джерел.
Програмне забезпечення KIKO

1
Той самий, дуже базовий для французького поштового індексу. Скористайтеся цим "^ ((0 [1-9]) | ([1-8] [0-9]) | (9 [0-8]) | (2A) | (2B)) [0-9] {3} $ "-> developmentpez.net/forums/d518232/webmasters-developpement-web/…
Vincent D.

Я зараз використовую i18napis.appspot.com/address/data/GB ; чи є проблеми з цією послугою?
мгмоль

1
Невелика поправка до коментаря @ kiko-software: остання версія, що містить дані поштового індексу, - 27.0.3 .
Сіет

89

використовувати ці regx

$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
Одна з кращих спроб, яку я бачив, реально відповісти на ОП. Робіть повільніше, ніж рекламуєте більше, але чіткий і чіткий підхід.
Роб

3
Це стає не повільніше, оскільки ви додаєте більше, як пропонує Роб, як ви вибрали б один із регулярних виразів з коду країни.
Thomaschaaf

2
Я бачу, ви це опублікували у 2012 році.
rybo111

@ rybo111 перевірити чи відповідь.
Джуліо Каччін

5
@ ddunn801, існує вагома різниця між валідацією шаблону та автентифікацією поштового індексу. Аутентифікувати коди на цілі порядки складніше, оскільки (принаймні в США) поштові індекси додаються та регулярно скидаються. В ідеальному світі слід здійснити швидку перевірку для підтвердження шаблону перед тим, як подати в службу (наприклад, USPS) для перевірки всієї поштової адреси (такі послуги, як ця платна, ви б не хотіли витрачати цінність з поганими даними ). На жаль, світ далеко не ідеальний.
JBH

48
  1. Кожна система поштових індексів використовує лише AZ та / або 0-9, а іноді пробіл / тире

  2. Не кожна країна використовує поштові індекси (наприклад, Ірландія за межами Дубліна), але ми ігноруємо це тут.

  3. Найкоротший формат поштового індексу - Сьєрра-Леоне NN

  4. Найдовше - американське Самоа с NNNNN-NNNNNN

  5. Ви повинні дозволити один пробіл або тире.

  6. Не повинен починатися чи закінчуватися пробілом або тире

Це має охоплювати вищезазначене:

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

8
Це здається єдиною відповіддю, яка забезпечує перевірку правильності (що, мабуть, те, чого хотів ОП), а не повну перевірку кожної можливої ​​комбінації. Точно те, що я хотів thx
Лукос

1
@GiulioCaccin H0H0H0 - дійсний канадський поштовий індекс (який діти використовують, щоб отримувати листи з Пошти Канади, прикидаючись Санта Клаусом), але це не означає, що це дійсний поштовий індекс клієнта :)
Ніл Макгуйган

2
FYI, Американське Самоа досить маленьке, щоб мати лише один поштовий індекс, і це 96799
натеркан

5
На мою думку, це єдина хороша відповідь. Він, наприклад, універсально може використовуватися як попередня перевірка в атрибуті шаблону HTML.
Blackbam

2
Я вважаю, що це хороша відповідь для ситуації, коли потрібно просто перевірити обґрунтованість, а не перевірити точно за країну. Просто мати трохи більш чисті дані без особливих зусиль - у випадках, коли потрібна повна безпека, може знадобитися сторонній плагін / служба, як вказували інші.
Йо

17

Спроба охопити весь світ одним регулярним виразом не є цілком можливою, і, звичайно, не здійсненною і не рекомендується.

Я не зазубрив власний ріг, але я написав кілька ретельно викладених регулярних виразів, які вам можуть бути корисними.

  • Канадські поштові індекси

    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))$

Неможливо гарантувати точність, фактично не надсилаючи щось на адресу та не повідомляючи про це людину, коли вона її отримує, але ми можемо звузити справи, усунувши випадки, які, як ми знаємо, погані.


У розширеній версії поштових індексів Канади може бути щось неправильне або відсутнє, оскільки в ній вказано, що наступний поштовий індекс недійсний: E3G 0A1, хоча він є дійсним.
fsschmitt

Я підтвердив усі 845 495 поштових індексів у Канаді, і ця рядок регулярних виразів має деякі виправлення щодо розширеної перевірки для підтримки всіх цих поштових індексів. Ось новий рядок для регулярних
вивірок

14

Це виглядає як хороший довідник, хоча його немає в Regex.

Дійсно, якщо ви фактично не доставляєте щось своїм користувачам, я не вважаю, що варто цього докладати. А якщо будуть вантажити його, є адреса чистячі засоби / послуги , які ви можете подивитися в , щоб зробити його набагато легше на себе.


Крім того, навіть якщо це правильний поштовий індекс сьогодні він дуже добре може змінитися в майбутньому. USPS постійно додає нові та розділяє області. Єдиний спосіб, коли ви можете бути в курсі, - це підтвердити час, коли ви фактично щось доставляєте. Деякі міста навіть вирішують змінювати свій поштовий індекс з різних причин.
NotMe

Схоже, хтось взяв статтю на wiki, яку ви опублікували вище, і виклав її JSON із регулярним виразом поштових та поштових індексів
Кріс Сміт

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.
Девід Торнлі

4
/ [0-9] {5} (?: - [0-9] {4})? / Дозволяє одночасно перевірити обидва стилі з США.
Час. Оуенс

2
@ Chas.Owens додаючи ^ і $ гарантують, що вони не можуть вводити нічого іншого до або після, як-от "12345aaa" ... / ^ [0-9] {5} (?: - [0-9] {4}) ? $ /
Тім Франклін

7

Залежно від вашої програми, ви можете застосувати відповідність регулярних виразів для країн, з яких походить більшість відвідувачів, а для решти немає перевірки (прийміть що-небудь).


6
.* 

Big Jump забув про розриви рядків, пробіли та контрольні символи.

Міжнародні поштові індекси - це певна проблема зупинки.


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})$

Сподіваюсь, я не помилився, мій регулярний фу-фу досить слабкий.


1
Я хотів би зазначити, що вираз для Франції та Великобританії не враховує можливих просторів; У Франції поштові індекси можна вводити з пробілом між другою та третьою цифрами (тобто 75 001 замість 75001). Британські поштові індекси часто пишуться з пробілом (тобто SW1 1AA замість SW11AA).
salcoin

@salcoin Спасибі за вклад, я цього не помічав (хоч я і французький). Схоже, відповідь Чі в цьому плані краща.
Nha

тому що str_replace простір, у якому немає місця, це супер оподаткування так? : p
Роберт Пуендер

6

Якщо когось все ще цікавить, як перевірити поштові індекси, я знайшов рішення:

За допомогою Google Geocoding APIми можемо перевірити дійсність поштового індексу, що має і код країни, і сам поштовий індекс.

Наприклад, я живу в Україні, тому можу перевірити так: https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA

Або за допомогою API JS: https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering

Там, де 80380дійсний ZIP для України, фактично кожен (#####) дійсний.

Google повертає ZERO_RESULTSстатус, якщо нічого не знайдено. Або OKі результат, якщо обидва вірні.

Сподіваюся, що це буде корисно.


Єдиним питанням було б обмеження кількості запитів, яке, в залежності від сайту / розміру, може бути проблемою.
Дарріл Хайн

@DarrylHein звичайно, але це зараз досить велика ціна, щоб змусити його працювати =)
Romko

4

Як вже вказували інші, одне підсумок, щоб керувати ними, малоймовірне. Однак ви можете скласти регулярні вирази для стільки країн, скільки вам потрібно, використовуючи інформацію про форматування адреси від Універсального поштового союзу - маловідомого агентства ООН.

Наприклад, ось правила форматування адреси, включаючи поштовий індекс, для кількох країн (формат PDF):


2

Проблема полягає в тому, що ви, мабуть, не маєте належних засобів, щоб не відставати від змін, що потребують поштових індексів країн з іншого боку земної кулі, і якими ви не користуєтесь загальними мовами. Якщо у вас недостатньо великий бюджет для відстеження цього, ви майже напевно краще перекладати відповідальність за перевірку адрес для google чи yahoo.

Обидві компанії забезпечують помилки пошуку адреси за допомогою програмованого API.


1

Чому ти це робиш і чому ти переймаєшся? Як зазначив Том Ріттер, не має значення, чи взагалі у вас є поштовий індекс / поштовий індекс, тим більше, чи дійсний він чи ні, поки і, якщо ви насправді не будете щось надсилати на цю адресу. Навіть якщо ви очікуєте , що ви будете посилати їм що - то коли - небудь , це не означає , вам потрібен поштовий індекс сьогодні .


Так, але якщо вони збираються ввести його, можливо, також переконайтесь, що він правильний у той момент. Однак я погоджуюся з однією з інших відповідей, яка, в основному, говорить про те, щоб зробити його підтвердженням для країн, які, на вашу думку, становлять більшість ваших клієнтів.
cdmckay

1
Деякі кредитні клірингові будинки не приймуть рахунок, якщо поштовий індекс не буде правильним. Я скоріше підтверджую поштовий індекс, а не надсилаю плату та відхиляю її.
SamGoody

1

Як зазначалося в інших місцях, розмаїття по всьому світу величезна. І навіть якщо щось, що відповідає шаблону, не означає, що воно існує.

Тоді, звичайно, є багато місць, де не використовуються поштові індекси (наприклад, багато чи Ірландія).


Насправді, напевно, вся Ірландія, оскільки я не думаю, що D1, D2 тощо вважаються належними поштовими індексами, оскільки ви не можете визначити адресу, використовуючи лише цей код та номер вулиці.
Dónal

1

За виправданням поштового індексу є причини, що не відповідають доставці. Турагенства, які проводять тури, що перетинають кордони (Єврозона виключається, звичайно), потребують цієї інформації достроково, щоб надати владі. Часто цю інформацію вводить агент, який може бути або не знайомий з такими речами. БУДЬ-ЯКІЙ метод, який може зменшити помилки - це Good Idea ™

Однак написати регулярний вираз, який охоплював би всі поштові індекси у світі, було б шалено.


1
Це лише гарна ідея, поки код не почне відхиляти дійсні поштові індекси або через те, що він баггі, або поштові індекси змінилися. Перевірка - це те, що повинно бути правильним або взагалі його немає. Принаймні, має бути варіант переосмислення.
Час. Оуенс

1

Зважаючи на те, що для кожної країни існує стільки крайових випадків (наприклад, лондонські адреси можуть використовувати дещо інший формат для решти Великобританії), я не думаю, що існує остаточний вираз, окрім, можливо:

[0-9a-zA-Z]+

Найкраще піти з досить широким малюнком (ну і не настільки широким, як описано вище), або обробити кожну країну / регіон конкретною власною схемою!

ОНОВЛЕННЯ: Однак, можливо, можна динамічно побудувати регулярний вираз на основі безлічі менших правил, конкретних для регіону - але не впевнені в продуктивності!

На сайті RegExLib можна знайти багато конкретних моделей .


1

Хтось запитував про список форматування поштових адрес, і я думаю, що це те, що він шукав ...

Нав'язливий посібник Франка по поштових адресах: http://www.columbia.edu/~fdc/postal/ Не дуже допомагає проблемам на рівні вулиць.

Моя робота використовує кілька інструментів, щоб допомогти у цьому: - послуги Lexis-Nexis, включаючи пошук NCOA (ви отримаєте стандартизацію адреси для "безкоштовних") - "Melissa Data" http://www.melissadata.com


1

Це дуже простий RegEx для перевірки поштового індексу США (не ZipCode Plus Four):

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

Здається, всі п'ятизначні числові цифри є дійсними поштовими кодами, за винятком 00000, 88888&99999 .

Я перевірив цей RegEx за допомогою http://regexpal.com/

СП


Цей RegEx не застосовує чотири цифри для zip + 4 частини. Наприклад, він вважає "92122-1" дійсним поштовим індексом.
Сенсей Джеймс

0

Якщо Zip Codeдозволяють символи та цифри (буквено-цифрові), нижче виражених знаків буде використано 5, 9 або 10 буквено-цифрових символів з одним гіпеном ( -):

^([0-9A-Za-z]{5}|[0-9A-Za-z]{9}|(([0-9a-zA-Z]{5}-){1}[0-9a-zA-Z]{4}))$
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.