什么是最终的邮政编码和正则expression式?

我正在寻找最终的邮政编码和邮政编码正则expression式。 我正在寻找将涵盖世界上大部分(希望全部)的东西。

空无一人。

世界各地的邮政编码不遵循共同的模式。 在一些国家,它们是由数字组成的,在另一些国家,它们可以是数字和字母的组合,有些可以包含空格,其他的点,字符的数量可以从两个不等到至less六个。

你可以做的(理论上)是为世界上的每个国家创build一个单独的正则expression式,不推荐IMO。 但是在validation部分仍然会缺less:邮编12345可能存在,但12346不存在,也许12344也不存在。 你如何检查与正则expression式?

你不能。

unicode CLDR包含每个国家的邮政编码正则expression式。 (总共158个正则expression式!)

谷歌还有一个web服务,每个国家的地址格式信息,包括邮政编码,在这里 – http://i18napis.appspot.com/address (我发现通过http://unicode.org/review/pri180/链接);

编辑

这里是一个postalCodeData.xml正则expression式的副本:

 "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}[ ]?[AZ]{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}([AZ]{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", "[AZ]{2}[ ]?[A-Z0-9]{2}" "BA", "\d{5}" "IO", "BBND 1ZZ" "BN", "[AZ]{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", "([AZ]\d{4}[AZ]|(?:[AZ]{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", "[AZ]{3}[ ]?\d{2,4}" "MU", "(\d{3}[AZ]{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|[AZ]\d[AZ\d]??|[AZ]{2}\d[AZ\d]??)[ ]??(\d[AZ]{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}$" ); 

试图用一个正则expression来覆盖整个世界并不是完全可能的,当然也不可行或不推荐。

不要嘟my我自己的号angular,但我已经写了一些非常彻底的正则expression式,你可能会发现有帮助。

  • 加拿大邮政编码

     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[VZ]|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))$ 

如果没有实际邮寄到某个地址,并让这个人在收到邮件时告诉他们,但是我们可以通过消除我们知道的不好的情况来缩小范围。

  1. 每个邮政编码系统只使用AZ和/或0-9,有时使用空格/短划线

  2. 不是每个国家都使用邮政编码(例如爱尔兰以外的爱尔兰),但我们在这里将忽略这一点。

  3. 最短的邮政编码格式是塞拉利昂和NN

  4. 最长的是美属萨摩亚和NNNNN-NNNNNN

  5. 你应该允许一个空格或破折号。

  6. 不应该以空格或破折号开始或结束

这应该包括以上内容:

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

这看起来像一个很好的参考,虽然它不在正则expression式。

真的,除非你真的向用户发货 ,否则我不认为这是值得的。 如果你正在发货,有地址清理工具/服务,你可以看看,使自己的方式更容易。

根据你的应用程序,你可能想实现正则expression式匹配的国家,其中大多数访问者的起源,没有validation其余(接受任何东西)。

我们使用以下内容:

加拿大

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

美国

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

其他

按原样接受

 .* 

大跳忘了换行符,空格和控制字符。

国际邮政编码是一种暂停问题。

如果有人仍然对如何validation邮政编码感兴趣,我已经find了一个解决scheme:

使用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,实际上每个(#####)都是有效的。

如果没有find,Google会返回ZERO_RESULTS状态。 或者OK ,如果两个都是正确的话。

希望这会有所帮助。

请注意,这是一个相当难的问题,正如接受的答案所述。 不过,我想这不会阻止geonames.org的人。 他们有一个文件的国家信息文件 ,这不适合整个这个答案 – 限制在30000字符显然。 有大约150个国家的正则expression式。

我在这里提取了与这个问题相关的位:

 AD ^(?:AD)*(\d{3})$ AM ^(\d{6})$ AR ^([AZ]\d{4}[AZ]{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 ^([AZ]{2}\d{2})$ BN ^([AZ]{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 ^(([AZ]\d{2}[AZ]{2})|([AZ]\d{3}[AZ]{2})|([AZ]{2}\d{2}[AZ]{2})|([AZ]{2}\d{3}[AZ]{2})|([AZ]\d[AZ]\d[AZ]{2})|([AZ]{2}\d[AZ]\d[AZ]{2})|(GIR0AA))$ GE ^(\d{4})$ GF ^((97|98)3\d{2})$ GG ^(([AZ]\d{2}[AZ]{2})|([AZ]\d{3}[AZ]{2})|([AZ]{2}\d{2}[AZ]{2})|([AZ]{2}\d{3}[AZ]{2})|([AZ]\d[AZ]\d[AZ]{2})|([AZ]{2}\d[AZ]\d[AZ]{2})|(GIR0AA))$ GL ^(\d{4})$ GP ^((97|98)\d{3})$ GR ^(\d{5})$ GT ^(\d{5})$ GU ^(969\d{2})$ GW ^(\d{4})$ HN ^([AZ]{2}\d{4})$ HR ^(?:HR)*(\d{5})$ HT ^(?:HT)*(\d{4})$ HU ^(\d{4})$ ID ^(\d{5})$ IL ^(\d{5})$ IM ^(([AZ]\d{2}[AZ]{2})|([AZ]\d{3}[AZ]{2})|([AZ]{2}\d{2}[AZ]{2})|([AZ]{2}\d{3}[AZ]{2})|([AZ]\d[AZ]\d[AZ]{2})|([AZ]{2}\d[AZ]\d[AZ]{2})|(GIR0AA))$ IN ^(\d{6})$ IQ ^(\d{5})$ IR ^(\d{10})$ IS ^(\d{3})$ IT ^(\d{5})$ JE ^(([AZ]\d{2}[AZ]{2})|([AZ]\d{3}[AZ]{2})|([AZ]{2}\d{2}[AZ]{2})|([AZ]{2}\d{3}[AZ]{2})|([AZ]\d[AZ]\d[AZ]{2})|([AZ]{2}\d[AZ]\d[AZ]{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 ^([AZ]{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}[AZ]{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 ^([AZ]{2}\d{5})$ SV ^(?:CP)*(\d{4})$ SZ ^([AZ]\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})$ 

希望我没有犯任何错误,我的正则expression式非常弱。

问题在于,你可能没有很好的手段来跟上世界各地不同国家不断变化的邮政编码要求,而且你们没有共同的语言。 除非你有足够的预算来跟踪这个,否则你几乎肯定会把validation地址的责任交给谷歌或雅虎。

两家公司均通过可编程API提供地址查询function。

你为什么这样做,你为什么在意? 正如汤姆·里特(Tom Ritter)所指出的那样,无论你是否拥有邮政编码,都不重要,更不用说是否有效,直到你真的要发送一些东西到那个地址为止。 即使你希望有一天你会寄给他们一些东西,这并不意味着你今天需要邮政编码。

正如其他地方所指出的,世界各地的变化是巨大的 而且,即使与模式相匹配的东西并不意味着存在。

那么,当然,有很多地方不使用邮政编码(比如爱尔兰)。

有一个准确的邮政编码超出航运的原因。 旅行社进行跨境旅游(欧元区当然除外)需要提前提供这些信息给当局。 通常情况下,这些信息是由可能或可能不熟悉这种事物的代理人input的。 任何可以减less错误的方法都是一个好主意

然而,编写一个涵盖全世界所有邮政编码的正则expression式将是疯狂的。

鉴于每个国家都有如此多的边缘案例(例如,伦敦的地址可能与英国其他地区使用的格式略有不同),我不认为有一个最终的正则expression式可能:

 [0-9a-zA-Z]+ 

最好采用相当广泛的模式(不如上面那么广泛),或者用自己的特定模式来对待每个国家/地区!

更新:但是,它可能是dynamic构build一个正则expression式基于大量更小的,区域特定的规则 – 虽然不确定性能!

在RegExLib网站上可以find许多国家特定的模式。

这是一个非常简单的RegExvalidation美国邮政编码(而不是ZipCode加四)。

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

似乎所有的五位数字是有效的邮编,除了“00000”,“88888”和“99999”。

我已经用http://regexpal.com/testing了这个RegEx

SP

有人问格式化邮寄地址列表,我想这是他正在寻找…

弗兰克的邮政地址强制性指南: http : //www.columbia.edu/~fdc/postal/但是,对街道问题没有什么帮助。

我的工作使用了几个工具来帮助解决这个问题: – Lexis-Nexis服务,包括NCOA查询(您将获得“免费”地址标准化) – “Melissa Data” http://www.melissadata.com

正如其他人所指出的,一个正则expression式来统治它们是不太可能的。 但是,您可以使用万国邮政联盟 – 一个鲜为人知的联合国机构的地址格式信息,为您所需的多个国家制定正则expression式。

例如,以下是几个国家/地区的地址格式规则(包括邮政编码)(PDF格式):

  • 加拿大
  • 日本
  • 瑞士
  • 俄罗斯联邦
  • 美国