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.
\d{5}([ \-]\d{4})?
. UU . Es .