preg_match php街道地址

时间:2012-01-02 12:32:19

标签: php preg-match

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

  • 144街道,城市,州邮政编码
  • 144 street,apt#1,city,state zip / postal code
  • 144 street apt#1,city state zip / postal code

邮政编码可以包含字母和/或数字。

这是我试过的:

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

输出:

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

这仅适用于空格。当我有一个逗号它不起作用,它会导致一个空数组。

我该怎么办还包括逗号?

4 个答案:

答案 0 :(得分:15)

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

另外,对于字母数字邮政编码,您可能需要添加除a-z0-9以外的其他字符,因为加拿大邮政编码会使用空格。

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

  

1000 NW单向驱动器

  

100 Rue Des Peupliers

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

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

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

答案 1 :(得分:1)

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

只需将“\ s”更改为“(,\ s | \ s)”,它将匹配空格或逗号和空格。除了fge之外,你的表达还有很多问题。考虑带有空格或连字符的街道或城市名称,例如......

答案 2 :(得分:0)

美国邮政服务有一个标准化API - https://www.usps.com/business/webtools.htm

通过正则表达式执行此操作将是一个痛苦的,错误的过程。许多地址都不遵循通常的格式。

答案 3 :(得分:-1)

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

试试这个