¿Cuál es el último código postal y zip regex?

Estoy buscando el último código postal y código postal regex. Estoy buscando algo que cubra la mayoría (con suerte, todo) del mundo.

No hay ninguno.

Los códigos postales / postales de todo el mundo no siguen un patrón común. En algunos países están compuestos por números, en otros pueden ser combinaciones de números y letras, algunos pueden contener espacios, otros puntos, el número de caracteres puede variar de dos a por lo menos seis …

Lo que podrías hacer (teóricamente) es crear una expresión regular separada para cada país del mundo, no es recomendable IMO. Pero aún faltaría en la parte de validación: el código postal 12345 puede existir, pero 12346 no, quizás 12344 tampoco existe. ¿Cómo verifica eso con una expresión regular?

No puedes.

El CLDR Unicode contiene la expresión regular del código postal para cada país. (¡158 expresiones regulares en total!)

Google también tiene un servicio web con información de formato de dirección por país, incluidos los códigos postales, aquí – http://i18napis.appspot.com/address (Encontré ese enlace a través de http://unicode.org/review/pri180/ )

Editar

Aquí una copia de 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}[ ]?[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}" 

usa estos 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}$" ); 
  1. Cada sistema de código postal usa solo AZ y / o 0-9 y algunas veces espacio / tablero

  2. No todos los países usan códigos postales (por ejemplo, Irlanda fuera de Dublín), pero lo ignoraremos aquí.

  3. El formato de código postal más corto es Sierra Leona con NN

  4. El más largo es Samoa Americana con NNNNN-NNNNNN

  5. Debes permitir un espacio o un punto.

  6. No debería comenzar o terminar con espacio o carrera

Esto debería cubrir lo anterior:

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

Intentar cubrir todo el mundo con una expresión regular no es completamente posible, y ciertamente no es factible ni recomendable.

No para tocar mi propio cuerno, pero he escrito algunas expresiones regulares muy completas que pueden ser útiles.

  • Códigos postales canadienses

     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}$ 
  • US códigos postales

     ^[0-9]{5}(-[0-9]{4})?$ 
  • Códigos postales del Reino Unido

     ^([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))$ 

No es posible garantizar la precisión sin enviar realmente algo a una dirección y hacer que la persona le avise cuando la reciba, pero podemos reducir las cosas eliminando los casos que sabemos que son malos.

Parece una buena referencia, aunque no está en Regex.

Realmente, a menos que realmente envíes algo a tus usuarios, no creo que valga la pena el esfuerzo. Y si lo está enviando, existen herramientas / servicios de limpieza de direcciones que puede consultar para que sea más fácil para usted.

Usamos lo siguiente:

Canadá

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

America

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

Otro

Aceptar como es

Dependiendo de su aplicación, es posible que desee implementar la coincidencia de expresiones regulares para los países donde se originan la mayoría de sus visitantes y no hay validación para el rest (aceptar cualquier cosa).

 .* 

Big Jump olvidó los saltos de línea, los espacios en blanco y los personajes de control.

Los códigos postales internacionales son un tipo de problema de detención.

Si alguien todavía está interesado en cómo validar los códigos postales, he encontrado una solución:

Utilizando Google Geocoding API podemos verificar la validez del código postal con el código de país y el código postal.

Por ejemplo, vivo en Ucrania, así que puedo marcar de esta manera: https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:80380|country:UA

O usando JS API: https://developers.google.com/maps/documentation/javascript/geocoding#ComponentFiltering

Donde 80380 es un ZIP válido para Ucrania, en realidad cada (#####) es válido.

Google devuelve el estado ZERO_RESULTS si no se encuentra nada. O OK y un resultado si ambos son correctos.

Esperamos que esto sea útil.

Tenga en cuenta que este es un problema bastante difícil, como lo indica la respuesta aceptada. Aunque creo que no disuadió a la gente en geonames.org . Tienen un archivo de un archivo de información del país , que no encaja en esta respuesta: el límite es de 30000 caracteres aparentemente. Hay expresiones regulares para cerca de 150 países.

Extraje los bits relevantes para esta pregunta aquí:

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

Con suerte no cometí ningún error, mi regex-fu es bastante débil.

El problema es que probablemente no tengas buenos medios para mantenerte al día con los requisitos del código postal cambiante de los países del otro lado del mundo que no comparten idiomas comunes. A menos que tenga un presupuesto suficientemente grande para rastrear esto, es casi seguro que le conviene otorgar la responsabilidad de validar las direcciones a google o yahoo.

Ambas compañías brindan servicios de búsqueda de direcciones a través de una API progtwigble.

Como han señalado otros, una expresión regular para gobernarlos a todos es poco probable. Sin embargo, puede crear expresiones regulares para tantos países como necesite usando la información de formato de dirección de Universal Postal Union , una agencia de la ONU poco conocida.

Por ejemplo, aquí están las reglas de formato de dirección, incluido el código postal, para un puñado de países (formato PDF):

  • Canadá
  • Japón
  • Suiza
  • Federación Rusa
  • Estados Unidos de America

¿Por qué estás haciendo esto y por qué te importa? Como señaló Tom Ritter, no importa si tienes un código postal o postal, y mucho menos si es válido o no, hasta que a menos que realmente vayas a enviar algo a esa dirección. Incluso si espera que algún día le envíe algo, eso no significa que necesite un código postal hoy .

Como se señaló en otra parte, la variación en todo el mundo es enorme. E incluso si algo que coincide con el patrón no significa que existe.

Entonces, por supuesto, hay muchos lugares donde los códigos postales no se utilizan (por ejemplo, mucho o Irlanda).

Hay razones más allá del envío para tener un código postal preciso. Las agencias de viajes que realizan recorridos que cruzan las fronteras (exceptuando la zona euro, por supuesto) necesitan esta información con anticipación para entregárselas a las autoridades. A menudo, esta información es ingresada por un agente que puede o no estar familiarizado con tales cosas. CUALQUIER método que pueda reducir los errores es una Buena Idea ™

Sin embargo, escribir una expresión regular que cubriría todos los códigos postales del mundo sería una locura.

Dado que hay tantos casos extremos para cada país (por ejemplo, las direcciones de Londres pueden usar un formato ligeramente diferente del rest del Reino Unido), no creo que exista una expresión final más que tal vez:

 [0-9a-zA-Z]+ 

Lo mejor es ir con un patrón bastante amplio (¡no tan amplio como el anterior) o tratar a cada país / región con un patrón específico propio!

ACTUALIZACIÓN: Sin embargo, puede ser posible construir dinámicamente una expresión regular basada en muchas reglas más pequeñas y específicas de la región, aunque no estoy seguro del rendimiento.

Se pueden encontrar muchos patrones específicos del país en el sitio RegExLib .

Este es un RegEx muy simple para validar código postal estadounidense (no ZipCode Plus Four).

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

Parece que los cinco dígitos numéricos son códigos postales válidos, excepto ‘00000’, ‘88888’ y ‘99999’.

He probado este RegEx con http://regexpal.com/

SP

Alguien estaba preguntando sobre la lista de direcciones de correo de formateo, y creo que esto es lo que estaba buscando …

Guía compulsiva de Frank para direcciones postales: http://www.columbia.edu/~fdc/postal/ Sin embargo, no ayuda mucho con los problemas de calle.

Mi trabajo utiliza un par de herramientas para ayudar con esto: – Servicios de Lexis-Nexis, incluidas las búsquedas de NCOA (obtendrá la estandarización de direcciones para “gratis”) – “Datos de Melissa” http://www.melissadata.com