2012-01-02 42 views
15

necesito para que coincida con el uso de expresiones regulares en las direcciones de php como:preg_match dirección de php calle

  • 144 calle, ciudad, estado código postal/código postal
  • 144 calle, apt # 1, ciudad, estado código postal/código postal
  • 144 calle # 1, código postal ciudad estado/código postal

El código postal/postal puede incluye letras y/o números.

Esto es lo que he intentado:

print_r(preg_match('/^([0-9]+)\s([a-z]+)\s([a-z]+)\s([a-z]+)\s([a-z0-9]+)$/i', $t, $m)); 
print_r($m); 

da salida:

Array 
(
    [0] => 123 asd asd asd 123 
    [1] => 123 
    [2] => street 
    [3] => city 
    [4] => state 
    [5] => zip 
) 

Esto funciona sólo con espacios. Cuando tengo una coma, no funciona y da como resultado una matriz vacía.

¿Qué puedo hacer para incluir también comas?

+0

No funcionará con su '#' allí. ¿Puede ser un poco más preciso acerca de qué entrada espera, aparte de los ejemplos anteriores? – fge

Respuesta

15

¿Por qué no simplemente elimina la coma y luego usa su expresión regular?

También para el código alfanumérico es posible que necesite agregar otros caracteres distintos de a-z0-9 ya que los códigos postales de Canadá usan espacio.

La otra cosa que hay que comprobar es si una calle ha espacios en ella como:

1000 NW One Way Drive

O

100 Rue Des Peupliers

Su expresión regular no funcionará. Lo mismo para la ciudad.

El uso de una API es bueno, pero debe obtener la API para los países que necesita. Si desea validar todo el país, puede ser doloroso.

ceejayoz tiene una buena respuesta, pero lo que creo que debes hacer es obtener la API para los principales países que obtienes y luego usar la expresión regular para todo lo demás.

-1

[0-9]+\s(\w)*(\W)(\s?)(\w)*(\W)(#[0-9])?(\W*)(\w)*(\W)(\s?)(\w)*(\s?)(\w)*

probar esto

+4

me sale: PHP Advertencia: preg_match(): Desconocido modificador '+' – Marty

1
/^([0-9]+)\s([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z]+)(,\s|\s)([a-z0-9]+)$/i 

cambiar sólo "\ s" a "(, \ S | \ s)", que se ajustaría bien un espacio en blanco o una coma y un whtiespace. Todavía hay muchos problemas con su expresión al lado de lo que FGE menciona. Piense en nombres de calles o ciudades con espacios o guiones, por ejemplo ...

0

El Servicio Postal de EE. UU. Tiene una API de normalización - https://www.usps.com/business/webtools.htm.

Hacer esto a través de regex será un proceso doloroso y complicado. Muchas direcciones no se ajustan al formato habitual.

+2

que será bueno para nosotros, ¿qué pasa con Canda? ¿REINO UNIDO? – aki

+0

Pensé que OP solo mencionaba direcciones de estilo estadounidense, pero veo que especificó que "zip" puede contener letras, lo que supongo que hace que sea un código postal más que un zip. Aún así, esto puede ayudar con una buena parte de sus direcciones. – ceejayoz

+0

lo siento, no veo "solo direcciones de estilo de EE. UU." En la Pregunta – aki

Cuestiones relacionadas