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
merci man.works joliment. – andrewk