2008-10-02 29 views
39

pensé que la gente estaría trabajando en pequeños proyectos de código juntos, pero yo no los veo, así que aquí tiene fácil:Código postal (Código Postal de los EE.UU.) de validación

Código que valida un código postal válido de los EEUU. Sé que hay bases de datos de códigos postales, pero todavía hay usos, como páginas web, validación rápida, y también el hecho de que los códigos postales se siguen emitiendo, por lo que es posible que desee utilizar la validación débil.

escribí un poco acerca de los códigos postales en un proyecto paralelo en mi wiki/blog:

https://benc.fogbugz.com/default.asp?W24

También hay un nuevo tipo, raro de código postal.

https://benc.fogbugz.com/default.asp?W42

Puedo hacer el código Javascript, pero sería interesante ver cuántos idiomas podemos llegar hasta aquí.

+0

Tu publicación de blog indica que "ZIP + 4 (10 dígitos)", luego de indicar que un código postal simple tiene 5 dígitos. Tengo dificultades para entender las matemáticas, aquí. – unwind

+0

@unwind: ZIP + 4 es en realidad 10 * caracteres *, no 10 * dígitos *. Tiene 9 dígitos, formateados como 12345-6789. La referencia en esa página a ZIP + 4 con 10 dígitos es incorrecta. –

+0

buen punto, voy a aclarar eso. – benc

Respuesta

54

Javascript Regex literal:

Estados Unidos códigos postales: /(^\d{5}$)|(^\d{5}-\d{4}$)/

var isValidZip = /(^\d{5}$)|(^\d{5}-\d{4}$)/.test("90210"); 

Algunos países utilizan Postal Codes, que fallaría este patrón.

+10

Puede reemplazar su expresión regular de prueba con/(^ \ d {5} (- \ d {4})? $/Para que sea un poco más conciso. También funcionará marginalmente más rápido en muchos motores de expresiones regulares. –

+1

@Dave, hay un error tipográfico en su optimización, falta el último ')'. –

+0

@cballou: en realidad, debe eliminar el primer '(' .No es necesario. – mpen

-1

¿Te refieres a la validación de la dirección? Al igual que la respuesta anterior de Mike, necesita atender el otro 95%.

Lo que puede hacer es cuando el usuario seleccione su país, luego habilite la validación. La validación de dirección y la validación de código postal son 2 cosas diferentes. Validar el ZIP es solo asegurarse de que sea un número entero. La validación de dirección valida la dirección real para precisión, preferiblemente para envío por correo.

6

Aquí hay una función de JavaScript que valida un código postal basado en un código de país. Permite un formato algo liberal. Puede agregar casos para otros países también. Tenga en cuenta que el caso predeterminado permite códigos postales vacíos, ya que no todos los países los usan.

function isValidPostalCode(postalCode, countryCode) { 
    switch (countryCode) { 
     case "US": 
      postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/; 
      break; 
     case "CA": 
      postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/; 
      break; 
     default: 
      postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/; 
    } 
    return postalCodeRegex.test(postalCode); 
} 

FYI El segundo enlace en referencia a los códigos postales de tocador parece haber sido una broma del Día de los inocentes.

+0

Estoy bastante seguro de que se refieren a la historia de NPR de 2004 (que acabo de encontrar). La información en el segundo enlace era de 2007, y creo que uno de los artículos que leí era en realidad del sitio de USPS (no guardé todos los enlaces). – benc

+0

Me sorprende que nadie haya sugerido que las expresiones regulares del código postal canadiense sean insensibles. Se podría convertir fácilmente la entrada en minúscula en superior antes de pasar a donde sea que va. ¡Piensa en la experiencia del usuario! – gillytech

-1

Para permitir al usuario introducir un código postal canadiense con letras minúsculas, así, la expresión regular tendría que tener este aspecto:

/^ ([a-zA-Z] [0-9] [ a-zA-Z]) \ s * ([0-9] [a-zA-Z] [0-9]) $/

+0

¿Se permiten letras minúsculas? Eché un vistazo rápido la entrada de wikipedia, y el exa mples parecen estar todas en mayúsculas, pero no se indicó explícitamente. – benc

26
function isValidUSZip(sZip) { 
    return /^\d{5}(-\d{4})?$/.test(sZip); 
} 
3

no se moleste "validar" los códigos postales de 5 dígitos , están obsoletos, como se explica en here

La correcta validación de direcciones y códigos ZIP + 4 se realiza con el software CASS contra las bases de datos de USPS.

+0

La clave, creo, es no vivir en algún lugar donde se comparte el código postal. – Muhd

5

Si estás haciendo para Canadá recordar que no todas las letras son válidos

Estas cartas no son válidos: D, F, I, O, Q, U o y las letras W y Z no se utilizan como La primera carta. También algunas personas usan un espacio opcional después del tercer carácter.

Aquí es una expresión regular para el código postal canadiense:

new RegExp(/^[abceghjklmnprstvxy][0-9][abceghjklmnprstvwxyz]\s?[0-9][abceghjklmnprstvwxyz][0-9]$/i)

La última i hace que sea sensible a mayúsculas.

1

Ésta es una buena solución JavaScript para el problema de validación tiene:

/\b\d{5}-\d{4}\b/ 
0

Una forma de comprobar código postal válido Canadá iS-

function isValidCAPostal(pcVal) { 
    return ^[A-Za-z][0-9][A-Za-z]\s{0,1}[0-9][A-Za-z][0-9]$/.test(pcVal); 
} 

Esperamos que esto ayude a alguien.

3

Aquí hay uno de un archivo de jQuery Plugin Validar additional-methods.js ...

jQuery.validator.addMethod("zipUS", function(value, element) { 
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(value); 
}, "Please specify a valid US zip code."); 

EDITAR: Dado que el código anterior es parte del plugin jQuery Validación, que depende del método .addMethod().

Quitar la dependencia de los plugins y que sea más genérico ....

function checkZip(value) { 
    return (/(^\d{5}$)|(^\d{5}-\d{4}$)/).test(value); 
}; 

Ejemplo de Uso: http://jsfiddle.net/5PNcJ/

1

Como yo trabajo en la industria de correo durante 17 años he visto todo tipo de la entrada de datos en esta área, me parece interesante la cantidad de personas que no conocen su dirección como lo define el USPS. Todavía veo direcciones como ésta:

XYZ universitarios
departamento de TI
City, San postal

La peor parte es el correo se entrega el 99% de las veces, el otro 1%, así que se devuelve para una dirección incompleta como debería.

En una publicación anterior alguien mencionó USPS CASS, ese software no es gratuito.

Para regexar un comprobador de código postal es bueno, estoy usando expresiones para determinar si el código postal de EE. UU., CA, RU o AU. He visto expresiones para Japón y otros que solo agregan desafíos al elegir el país correcto al que pertenece el archivo zip.

De lejos, la mejor respuesta es usar listas desplegables para estado y país. Luego use tablas para validar aún más si es necesario. Para hacerte una idea, hay 84052 combinaciones aceptables de US City St Zip solo en los primeros 5 dígitos. Hay 249 países válidos según la ISO y hay 65 estados/territorios de EE. UU.

También hay clases de código postal Militar, casilla de correos y código postal único. KISS aplica aquí.

+0

¿Por qué publicaste dos respuestas? Puedes editar tu respuesta. – dcaswell

0

Para ampliar mi respuesta, UPS y FedEx no pueden entregar a un PO BOX sin utilizar el USPS como controlador final. La mayoría del software de envío no permite un zip de apartado postal para sus servicios estándar. Ejemplos de cremalleras de PO Box son 00604 - RAMEY, PR y 06141 - HARTFORD, CT.

La necesidad de validar códigos postales en realidad puede ser una cuestión de qué tan lejos llegar, cuál es el presupuesto, cuál es la línea de tiempo.

Como cualquier cosa con expresiones prueba, prueba, prueba y prueba de nuevo. Tenía una expresión para la validación del estado y encontré que YORK pasó cuando debería fallar. Una vez en miles, alguien ingresó a Nueva York, Nueva York, 10279, ugh.

También tenga en cuenta que a USPS no le gusta la puntuación como N. Market St. y también tiene abreviaturas aceptables muy específicas para cosas como Lane, Place, North, Corporation y similares.

+1

¿Por qué publicaste dos respuestas? ¡Puedes editar tu respuesta! – dcaswell

Cuestiones relacionadas