regex para código postal

118

Posible duplicado:
¿Cuál es el código postal definitivo y la expresión regular zip?

Necesito Regex que pueda satisfacer mis tres condiciones para el código postal. P.ej-

  1. 12345
  2. 12345-6789
  3. 12345 1234

Cualquier consejo y sugerencia será muy apreciado. Gracias !

Shaitender Singh
fuente
4
El cierre duplicado parece incompleto: el engañado está pidiendo una expresión regular que coincida con cualquier código postal de cualquier país, mientras que esta pregunta solicita una expresión regular que coincida con los códigos postales, que son algo exclusivo de EE. UU., Lo que hace que esta pregunta sea mucho alcance más limitado que la víctima - pero no es , de hecho, una respuesta que se encuentran en la víctima. Consulte stackoverflow.com/a/7185241/1709587, que enumera las expresiones regulares del código postal Unicode CLDR (antiguo, ahora en desuso, pero probablemente todavía adecuado en muchos casos) para> 100 países, incluido EE. UU. La expresión regular de EE \d{5}([ \-]\d{4})?. UU . Es .
Mark Amery

Respuestas:

311
^\d{5}(?:[-\s]\d{4})?$
  • ^ = Inicio de la cadena.
  • \d{5} = Coincide con 5 dígitos (para la condición 1, 2, 3)
  • (?:…) = Agrupación
  • [-\s] = Coincide con un espacio (para la condición 3) o un guión (para la condición 2)
  • \d{4} = Coincide con 4 dígitos (para la condición 2, 3)
  • …? = El patrón anterior es opcional (para la condición 1)
  • $ = Fin de la cadena.
Kennytm
fuente
7
\scoincidirá con cualquier espacio en blanco, incluidas las pestañas y las nuevas líneas.
párpados
1
Hola, ¿qué pasa con la condición 123451234 sin espacio
Ajay Suwalka
4
@ProVega: Al leer los comentarios sobre la respuesta (ahora eliminada) a la que vinculó, parece ser incorrecta. Por ejemplo, 00544es un código postal válido; 544no es.
Keith Thompson
2
@AjaySuwalka: Todo lo que tendría que hacer para acomodar 123451234 sin espacio es colocar un? después de [- \ s], por lo que se convertiría en: ^ \ d {5} (?: [- \ s]? \ d {4})? $
Grungondola
6
Un poco tarde para la fiesta, y tal vez no sea la campana más bonita del baile, pero agregué espacios opcionales adicionales a cada lado del guión, principalmente por motivos estéticos. /(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel
4

Solo para las tres condiciones enumeradas, estas expresiones también pueden funcionar:

^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$

Consulte esta demostración para obtener una explicación adicional.

Si hubiéramos tenido espacios adicionales inesperados entre 5 y 4 dígitos o un código postal continuo de 9 dígitos, como:

123451234
12345 1234
12345  1234

esta expresión, por ejemplo, sería una opción secundaria con menos restricciones:

^\d{5}([-]|\s*)?(\d{4})?$

Consulte esta demostración para obtener una explicación adicional.

Circuito RegEx

jex.im visualiza expresiones regulares:

ingrese la descripción de la imagen aquí

Prueba

const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = `12345
12345-6789
12345 1234
123451234
12345 1234
12345  1234
1234512341
123451`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Emma
fuente
0

Sé que esto puede ser obvio para la mayoría de las personas que usan RegEx con frecuencia, pero en caso de que algún lector sea nuevo en RegEx, pensé que debería señalar una observación que hice y que fue útil para uno de mis proyectos.

En una respuesta anterior de @kennytm:

^\d{5}(?:[-\s]\d{4})?$

...? = El patrón anterior es opcional (para la condición 1)

Si desea permitir códigos postales estándar de 5 dígitos y +4, este es un gran ejemplo.

Para hacer coincidir solo los códigos postales en el formato 'Zip + 4' de EE. UU. Como necesitaba hacer (solo condiciones 2 y 3), simplemente elimine el último ?para que siempre coincida con el último grupo de 5 caracteres.

Una herramienta útil que recomiendo para jugar con RegEx está vinculada a continuación:

https://regexr.com/

Utilizo esta herramienta con frecuencia cuando encuentro RegEx que hace algo similar a lo que necesito, pero que podría adaptarse un poco mejor. También tiene un ingenioso menú de referencia de RegEx y una interfaz informativa que lo mantiene al tanto de cómo sus cambios afectan las coincidencias para el texto de muestra que ingresó.

Si me equivoqué o me perdí algún dato importante, corrígeme.

NjalTheKnut
fuente
o puede consultar este tutorial de
expresiones