2010-09-07 8 views
0

c'est d'un tableau que j'aiphp état ville regex zip

[citystatezip] => New York, NY 50805-2578 

je suis en train de l'avoir dans le format ci-dessous

[city] => New York 
[state] => NY 
[zip] => 50805-2578 

j'utilisais regex dans php..but se est nulle part.

merci pour l'aide.

Répondre

3

Essayez cette regex:

/([^,]+),\s*(\w{2})\s*(\d{5}(?:-\d{4})?)/ 

Traduit en code:

$str = "New York, NY 50805-2578"; 
preg_match("/([^,]+),\s*(\w{2})\s*(\d{5}(?:-\d{4})?)/", $str, $matches); 

list($arr['addr'], $arr['city'], $arr['state'], $arr['zip']) = $matches; 
print_r($arr); 

donne:

Array 
(
    [zip] => 50805-2578 
    [state] => NY 
    [city] => New York 
    [addr] => New York, NY 50805-2578 
) 

Avec cette regex:

  • Il y a une validation d'entrée (par exemple: nécessite l'intervention d'être sous la forme de: XXXXXXX, YY NNNNN-NNNN)

  • Les espaces sont facultatifs

  • Les 4 derniers chiffres du zip sont en option

+0

merci man.works joliment. – andrewk

0

(.+?), (\w+) ([-\d]+)

obtenir ensuite les informations des groupes de capture.

+0

vous devez utiliser 'ungreedy' /'? 'Dans votre regex. – RobertPitt

+0

Le travail de Regex. Je l'ai testé –

0

Pourquoi ne pas le faire.

/(?P<city>[^,]+),\s*(?P<state>\w{2})\s*(?P<zip>\d{5}(?:-\d{4})?)/ 

vous épargnerez faire:

$arr['city'] = $matches[1]; 
$arr['state'] = $matches[2]; 
$arr['zip'] = $matches[3]; 

donc quand vous:

print_r($matches); 

vous obtiendrez

Array 
(
    [city] => New York 
    [state] => NY 
    [zip] => 50805-2578 
) 

expression principale d'occasion à partir NullUserException et tout le crédit va lui . Je viens de raccourcir le processus.