php regex город-штат почтовый индекс - PullRequest
0 голосов
/ 08 сентября 2010

это из массива у меня

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

Я пытаюсь получить его в формате ниже

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

я использовал регулярное выражение в php ... но ничего не получилось.

спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 08 сентября 2010

Попробуйте это регулярное выражение:

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

Переведено в код:

$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);

Дает:

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

С этим регулярным выражением:

  • Существует некоторая проверка ввода (например: требуется, чтобы ввод был в форме: XXXXXXX, YY NNNNN-NNNN)

  • Пробелы необязательны

  • Последние 4 цифры почтового индекса являются необязательными

0 голосов
/ 08 сентября 2010

Почему бы не сделать.

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

Спасает вас делать:

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

поэтому, когда вы:

print_r($matches);

вы получите

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

Основное выражение, использованное в NullUserException, и вся заслуга ему.Я просто сократил процесс.

0 голосов
/ 08 сентября 2010

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

Затем получите информацию от групп захвата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...