我需要在php地址中使用正则表达式匹配,如:
邮政编码可以包含字母和/或数字。
这是我试过的:
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
)
这仅适用于空格。当我有一个逗号它不起作用,它会导致一个空数组。
我该怎么办还包括逗号?
答案 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)*
试试这个