Что такое окончательный почтовый индекс и почтовый индекс regex?
Я ищу окончательный почтовый индекс и почтовый индекс regex. Я ищу что-то, что будет охватывать большинство (надеюсь, все) в мире.
19 ответов:
нет.
почтовые / почтовые индексы по всему миру не следуют общей схеме. В одних странах они состоят из цифр, в других-из комбинаций цифр и букв, в некоторых-из пробелов, в других-из точек, количество символов может варьироваться от двух до как минимум шести...
то, что вы могли бы сделать (теоретически), это создать отдельное регулярное выражение для каждой страны в мире, не рекомендуется ИМО. Но вы все равно будете отсутствовать на проверке часть: почтовый индекс
12345
может существовать, но12346
не может12344
тоже не существует. Как вы проверяете это с помощью регулярного выражения?ты не можешь.
CLDR unicode содержит регулярное выражение почтового индекса для каждой страны. (Всего 158 регулярных выражений!)
- скачать его здесь -http://cldr.unicode.org/index/downloads
- распаковать ядро.молнии
- посмотри общие / дополнительные / postalCodeData.xml
У Google также есть веб-сервис с информацией о форматировании адресов по странам, включая почтовые индексы, здесь - http://i18napis.appspot.com/address (Я нашел эту ссылку через http://unicode.org/review/pri180/ )
Edit
вот копия postalCodeData.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}"
используйте эти 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}$" );
каждая система почтовых индексов использует только A-Z и/или 0-9, а иногда пробел / тире
не каждая страна использует почтовые индексы (например. Ирландия за пределами Дублина), но мы будем игнорировать это здесь.
самый короткий формат почтового индекса-Сьерра-Леоне с
NN
самый длинный-Американское Самоа с
NNNNN-NNNNNN
вы должны разрешить один пробел или тире.
не должно начинаться или заканчиваться пробелом или тире
Это должно охватывать выше:
(?i)^[a-z0-9][a-z0-9\- ]{0,10}[a-z0-9]$
попытка охватить весь мир одним регулярным выражением не является полностью возможной и, конечно же, неосуществимой или рекомендуемой.
не для того, чтобы гудеть мой собственный рог, но я написал несколько довольно тщательных регулярных выражений, которые вы можете найти полезными.
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))$
невозможно гарантировать точность, фактически не отправляя что-то по адресу и не давая человеку знать, когда они его получают, но мы можем сузить вещи, исключив случаи, которые, как мы знаем, плохи.
Это выглядит как хорошая ссылка хотя это не в регулярном выражении.
действительно, если вы на самом деле доставка что-то для пользователей, я не думаю, что это стоит усилий. И если вы are доставка его, есть адрес очистки инструменты / услуги, которые вы можете посмотреть, чтобы сделать его путь проще на себя.
мы используем следующие:
Канада
([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
другое
прими как есть
в зависимости от вашего приложения, вы можете реализовать соответствие регулярных выражений для стран, где происходит большинство ваших посетителей, и без проверки для остальных (принять что-либо).
.*
большой скачок забыл про разрывы строк, пробелы и управляющие символы.
международные почтовые индексы являются своего рода проблемой остановки.
если кто-то все еще заинтересован в том, как проверить почтовые индексы я нашел решение:
используя
Google Geocoding API
мы можем проверить действительность почтового индекса, имеющего оба код страны и ZIP код.например я живу в Украине, так что я могу проверить, как это: 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 для Украины, фактически каждый (#####) действителен.Google возвращает
ZERO_RESULTS
статус, если ничего не нашли. ИлиOK
и результат, если оба верны.надеюсь, это будет полезно.
обратите внимание, что это довольно сложная проблема, как указано в принятом ответе. Я думаю, это не отпугнуло людей в 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})$
надеюсь, я не ошибся, мое регулярное выражение-фу довольно слабый.
проблема будет в том, что у вас, вероятно, нет хороших средств, чтобы идти в ногу с меняющимися требованиями почтовых индексов стран на другой стороне земного шара и которые вы не разделяете общие языки. Если у вас нет достаточно большого бюджета, чтобы отслеживать это, вам почти наверняка лучше дать ответственность за проверку адресов в google или yahoo.
обе компании предоставляют возможности поиска адресов через программируемый API.
как указывали другие, одно регулярное выражение для управления ими всеми маловероятно. Однако вы можете создавать регулярные выражения для любого количества стран, используя информация о форматировании адреса от Всемирного Почтового Союза -- малоизвестное агентство ООН.
например, вот правила форматирования адресов, включая почтовый индекс, для нескольких стран (PDF формат):
Зачем ты это делаешь и почему тебя это волнует? Как отметил том Риттер, не имеет значения, есть ли у вас вообще почтовый индекс, а тем более действителен ли он или нет, до тех пор, пока вы действительно не отправите что-то на этот адрес. Даже если вы ожидаете, что вы будете посылать им что-то когда-нибудь, это не значит, что вам нужен почтовый код .
Как уже отмечалось в другом месте вариация по всему миру огромна. И даже если что-то соответствует шаблону, это не значит, что оно существует.
тогда, конечно, есть много мест, где индексы не используются (например, много или Ирландии).
есть причины помимо доставки для того, чтобы иметь точный почтовый индекс. Турагентства, осуществляющие туры, пересекающие границы (за исключением еврозоны, конечно), нуждаются в этой информации заранее, чтобы предоставить ее властям. Часто эта информация вводится агентом, который может быть или не быть знаком с такими вещами. Любой метод, который может сократить количество ошибок-это хорошая идея™
однако писать регулярное выражение, которое охватывало бы все почтовые индексы в мире, было бы безумием.
учитывая, что есть так много пограничных случаев для каждой страны (например. Лондонские адреса могут использовать немного другой формат для остальной части Великобритании) я не думаю, что есть конечное регулярное выражение, кроме, возможно:
[0-9a-zA-Z]+
лучше всего идти с довольно широким рисунком (ну не совсем так широко, как выше), или относиться к каждой стране/региону с определенным рисунком своей собственной!
обновление: тем не менее, может быть возможно динамически построить регулярное выражение на основе на много меньших, специфических для региона правил - не уверен в производительности, хотя!
много стран конкретных моделей можно найти на RegExLib сайт.
Это очень простое регулярное выражение для проверки нас Zipcode (не ZipCode плюс четыре).
(?!([089])\1{4})\d{5}
кажется, все пятизначные числовые действительны zipcodes за исключением '00000', '88888' & '99999'.
Я проверил это регулярное выражение с http://regexpal.com/
SP
кто-то спрашивал о списке форматирование почтовых адресов, и я думаю, что это то, что он искал...
компульсивное руководство Фрэнка по почтовым адресам:http://www.columbia.edu/~fdc / postal/ Однако это не очень помогает в вопросах уличного уровня.
мои работы использует несколько инструментов, чтобы помочь с этим: - Lexis-Nexis услуги, в том числе поиск НКОА (вы получите адрес стандартизации для " бесплатно") - "Данные Мелиссы" http://www.melissadata.com