preg_match php街道地址

Mar*_*rty 15 php preg-match

我需要在php地址中使用正则表达式进行匹配,例如:

  • 144街道,城市,州邮政编码
  • 144街,apt#1,城市,州邮政编码
  • 144 street apt#1,城市州邮政编码

邮政编码可包括字母和/或数字.

这是我试过的:

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);
Run Code Online (Sandbox Code Playgroud)

它输出:

Array
(
    [0] => 123 asd asd asd 123
    [1] => 123
    [2] => street
    [3] => city
    [4] => state 
    [5] => zip
)
Run Code Online (Sandbox Code Playgroud)

这只能使用空格.当我有一个逗号它不起作用,它会导致一个空数组.

我该怎么办还包括逗号?

aki*_*aki 15

为什么不简单地删除逗号然后使用正则表达式?

此外,对于字母数字zip,您可能需要添加其他字符,a-z0-9因为加拿大邮政编码使用空格.

您需要检查的另一件事是街道中是否有空格,如:

1000 NW单向驱动器

要么

100 Rue Des Peupliers

你的正则表达式不起作用.同样适用于城市.

使用API​​很好,但您必须获得所需国家/地区的API.如果你想验证所有可能痛苦的国家.

ceejayoz有一个很好的答案,但我认为你应该做的是获得你所获得的顶级国家的API,然后使用正则表达式来做其他事情.