Tôi đang tìm kiếm mã bưu chính và mã zip cuối cùng. Tôi đang tìm kiếm thứ gì đó sẽ bao gồm hầu hết (hy vọng là tất cả) trên thế giới.
Tôi đang tìm kiếm mã bưu chính và mã zip cuối cùng. Tôi đang tìm kiếm thứ gì đó sẽ bao gồm hầu hết (hy vọng là tất cả) trên thế giới.
Câu trả lời:
Chẳng có ai.
Mã bưu chính / mã zip trên toàn thế giới không theo một mô hình chung. Ở một số quốc gia, chúng được tạo thành bởi các số, ở các quốc gia khác, chúng có thể là tổ hợp số của một chữ cái, một số có thể chứa dấu cách, các dấu chấm khác, số lượng ký tự có thể thay đổi từ hai đến ít nhất sáu ...
Những gì bạn có thể làm (về mặt lý thuyết) là tạo ra một biểu thức riêng biệt cho mọi quốc gia trên thế giới, không khuyến nghị IMO. Nhưng bạn vẫn sẽ bị thiếu trong phần xác thực: Mã zip 12345
có thể tồn tại, nhưng 12346
không, có lẽ 12344
cũng không tồn tại. Làm thế nào để bạn kiểm tra điều đó với một regex?
Bạn không thể.
^\d{5}(?:[-\s]\d{4})?$
CLDR unicode chứa regex mã bưu chính cho mỗi quốc gia. (Tổng cộng 158 regex!)
core.zip
từ http://unicode.org/Public/cldr/26.0.1/common/supplemental/postalCodeData.xml
từ nội dung được giải nén (nội dung trực tiếp: chung / bổ sung / PostalCodeData.xml )Google cũng có một dịch vụ web với thông tin định dạng địa chỉ theo quốc gia, bao gồm mã bưu chính, tại đây - http://i18napis.appspot.com/address (Tôi tìm thấy liên kết đó qua http://unicode.org/review/pri180/ )
Biên tập
Đây là một bản sao của regex 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}"
sử dụng những regx này
$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}$"
);
Mỗi hệ thống mã bưu chính chỉ sử dụng AZ và / hoặc 0-9 và đôi khi không gian / dấu gạch ngang
Không phải mọi quốc gia đều sử dụng mã bưu chính (ví dụ Ireland bên ngoài Dublin), nhưng chúng tôi sẽ bỏ qua điều đó ở đây.
Định dạng mã bưu chính ngắn nhất là Sierra Leone với NN
Lâu nhất là Samoa Mỹ với NNNNN-NNNNNN
Bạn nên cho phép một không gian hoặc dấu gạch ngang.
Không nên bắt đầu hoặc kết thúc với không gian hoặc dấu gạch ngang
Điều này sẽ bao gồm những điều trên:
(?i)^[a-z0-9][a-z0-9\- ]{0,10}[a-z0-9]$
Cố gắng bao phủ toàn bộ thế giới bằng một biểu thức chính quy là không hoàn toàn có thể, và chắc chắn là không khả thi hoặc được khuyến nghị.
Không bấm còi của riêng tôi, nhưng tôi đã viết một số biểu thức chính quy khá kỹ lưỡng mà bạn có thể thấy hữu ích.
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))$
Không thể đảm bảo tính chính xác mà không thực sự gửi thư đến một địa chỉ và nhờ người đó cho bạn biết khi họ nhận được, nhưng chúng tôi có thể thu hẹp mọi thứ bằng cách loại bỏ các trường hợp mà chúng tôi biết là xấu.
Đây có vẻ là một tài liệu tham khảo tốt mặc dù nó không có trong Regex.
Thực sự, trừ khi bạn thực sự vận chuyển một cái gì đó cho người dùng của bạn, tôi không nghĩ rằng nó đáng để nỗ lực. Và nếu bạn đang vận chuyển nó, có những công cụ / dịch vụ làm sạch địa chỉ mà bạn có thể xem xét để làm cho nó dễ dàng hơn với chính mình.
Chúng tôi sử dụng như sau:
Canada
([A-Z]{1}[0-9]{1}){3} //We raise to upper first
Mỹ
[0-9]{5} //-or-
[0-9]{5}-[0-9]{4} //10 digit zip
Khác
Chấp nhận như là
.*
Big Jump quên về ngắt dòng, khoảng trống và ký tự điều khiển.
Mã bưu chính quốc tế là một loại vấn đề tạm dừng.
Xin lưu ý rằng đây là một vấn đề khá khó khăn, như đã nêu trong câu trả lời được chấp nhận. Tôi đoán rằng nó đã không ngăn cản mọi người tại geonames.org . Họ có một tệp một tệp thông tin quốc gia , không phù hợp với câu trả lời này - giới hạn rõ ràng là 30000 ký tự. Có regex cho khoảng 150 quốc gia.
Tôi đã trích xuất các bit liên quan đến câu hỏi này ở đây:
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})$
Hy vọng rằng tôi đã không phạm sai lầm nào, regex-fu của tôi khá yếu.
Nếu ai đó vẫn quan tâm đến cách xác thực mã zip, tôi đã tìm thấy giải pháp:
Sử dụng Google Geocoding API
chúng tôi có thể kiểm tra tính hợp lệ của mã ZIP có cả mã quốc gia và chính mã ZIP .
Ví dụ: tôi sống ở Ukraine vì vậy tôi có thể kiểm tra như thế này: https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA
Hoặc sử dụng API API: https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering
Trường 80380
hợp ZIP hợp lệ cho Ukraine, thực tế mọi (#####) đều hợp lệ.
Google trả lại ZERO_RESULTS
trạng thái nếu không tìm thấy gì. Hoặc OK
và một kết quả nếu cả hai đều đúng.
Hy vọng điều này sẽ hữu ích.
Như những người khác đã chỉ ra, một regex để cai trị tất cả là không thể. Tuy nhiên, bạn có thể tạo biểu thức chính quy cho nhiều quốc gia mà bạn cần bằng cách sử dụng thông tin định dạng địa chỉ từ Universal Postal Union - một cơ quan ít được biết đến của Liên Hợp Quốc.
Ví dụ: đây là các quy tắc định dạng địa chỉ, bao gồm mã bưu chính, cho một số quốc gia (định dạng PDF):
Vấn đề sẽ là bạn có thể không có phương tiện tốt để theo kịp các yêu cầu thay đổi mã bưu chính của các quốc gia ở phía bên kia địa cầu và bạn không chia sẻ ngôn ngữ chung. Trừ khi bạn có ngân sách đủ lớn để theo dõi điều này, bạn gần như chắc chắn sẽ tốt hơn khi giao trách nhiệm xác thực địa chỉ cho google hoặc yahoo.
Cả hai công ty đều cung cấp các tiện ích tra cứu địa chỉ thông qua API có thể lập trình.
Tại sao bạn làm điều này và tại sao bạn quan tâm? Như Tom Ritter đã chỉ ra, việc bạn thậm chí có mã ZIP / bưu chính hay không, không quan trọng đến việc nó có hợp lệ hay không, cho đến khi và trừ khi bạn thực sự sẽ gửi một cái gì đó đến địa chỉ đó. Ngay cả khi bạn mong đợi rằng bạn sẽ gửi cho họ một cái gì đó vào một ngày nào đó , điều đó không có nghĩa là bạn cần một mã bưu chính ngày hôm nay .
Như đã lưu ý ở nơi khác, sự thay đổi trên toàn thế giới là rất lớn. Và ngay cả khi một cái gì đó phù hợp với mô hình không có nghĩa là nó tồn tại.
Sau đó, tất nhiên, có nhiều nơi mà mã bưu điện không được sử dụng (ví dụ như nhiều hoặc Ireland).
Có nhiều lý do ngoài việc vận chuyển để có một mã bưu chính chính xác. Các công ty du lịch thực hiện các tour du lịch xuyên biên giới (tất nhiên là Eurozone) cần thông tin này trước thời hạn để cung cấp cho chính quyền. Thông thường thông tin này được nhập bởi một đại lý có thể hoặc không quen thuộc với những điều đó. BẤT K method phương pháp nào có thể cắt giảm những sai lầm là một ý tưởng tốt ™
Tuy nhiên, viết một biểu thức chính quy bao gồm tất cả các mã bưu chính trên thế giới sẽ là điên rồ.
Cho rằng có rất nhiều trường hợp cạnh cho mỗi quốc gia (ví dụ: địa chỉ Luân Đôn có thể sử dụng định dạng hơi khác so với phần còn lại của Vương quốc Anh) Tôi không nghĩ rằng có một biểu thức chính thức khác ngoài có thể:
[0-9a-zA-Z]+
Tốt nhất là đi với một mô hình khá rộng (cũng không hoàn toàn rộng như trên), hoặc đối xử với mỗi quốc gia / khu vực bằng một mô hình cụ thể của riêng mình!
CẬP NHẬT: Tuy nhiên, có thể tự động xây dựng một biểu thức chính quy dựa trên nhiều quy tắc cụ thể theo vùng nhỏ hơn - không chắc chắn về hiệu suất mặc dù!
Rất nhiều mẫu cụ thể của quốc gia có thể được tìm thấy trên trang RegExLib .
Ai đó đang hỏi về danh sách các địa chỉ gửi thư định dạng và tôi nghĩ đây là thứ mà anh ta đang tìm kiếm ...
Hướng dẫn bắt buộc của Frank đối với các địa chỉ bưu chính: http://www.columbia.edu/~fdc/postal/ Tuy nhiên, không giúp được gì nhiều cho các vấn đề ở cấp đường phố.
Công việc của tôi sử dụng một số công cụ để hỗ trợ việc này: - Các dịch vụ của Lexis-Nexis, bao gồm tra cứu NCOA (bạn sẽ nhận được tiêu chuẩn hóa địa chỉ cho "miễn phí") - "Dữ liệu Melissa" http://www.melissadata.com
Đây là một RegEx rất đơn giản để xác thực Mã Zip Hoa Kỳ (không phải ZipCode Plus Four):
(?!([089])\1{4})\d{5}
Có vẻ như tất cả các số năm chữ số là mã zip hợp lệ ngoại trừ 00000
, 88888
&99999
.
Tôi đã thử nghiệm RegEx này với http://regExal.com/
SP
Nếu Zip Code
cho phép các ký tự và chữ số (chữ và số), bên dưới regex sẽ được sử dụng ở nơi khớp với, 5 hoặc 9 hoặc 10 ký tự chữ và số có một dấu gạch ngang ( -
):
^([0-9A-Za-z]{5}|[0-9A-Za-z]{9}|(([0-9a-zA-Z]{5}-){1}[0-9a-zA-Z]{4}))$