Pregunta

No soy tan bueno con expresiones regulares. Im que busca agregar una función de validación que devolverá verdadero / falso si la cadena de entrada en que es una postal de Estados Unidos, Reino Unido, CA o código válido / postal.

LOS EEUU: NNNNN CA: LNL NLN Reino Unido: un montón de combinaciones

L = carta, N = Número

Hay funciones individuales de los Estados Unidos y Canadá, pero no pudieron llegar a una sola función unificado para ello.

¿Fue útil?

Solución

Tome un vistazo a Zend_Validate_Postcode de la Zend Framework :

  

Zend_Validate_PostCode le permite   determinar si un valor dado es un válido   código postal. códigos postales son específicos   a las ciudades, y en algunos lugares denominado   Códigos ZIP.

     

Zend_Validate_PostCode   sabe más de 160 diferentes postal   formiatos de código. Para seleccionar la correcta   Formato hay 2 maneras. Usted puede   o bien utilizar un entorno local completo o   puede establecer su propio formato manualmente.

supongo que cualquiera podría mirar a la fuente, o utilizarlo como un componente independiente. Se puede tener dependencias dentro de la ZF, pero desde luego no tendrá que utilizar todo el marco justo para ese componente. Espero que ayude.

Otros consejos

Mi solución sería ir por tres expresiones regulares separadas usando operadores lógicos OR:

if (
    preg_match('/^\d{5}(?:\-\d{4})?$/i', $code, $matches) OR
    preg_match('/^[a-z]\d[a-z] ?\d[a-z]\d$/i', $code, $matches) OR
    preg_match('/^[a-z]{1,2}\d{1,2} ?\d[a-z]{2}$/i', $code, $matches)
) {
    // deal with $matches here
}

Tenga en cuenta que esto funciona porque PHP utiliza la lógica de cortocircuito. Una vez que una prueba ha pasado, los otros son ignorados por lo $matches no será reemplazado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top