有没有人有一个 php 类或正则表达式来将地址解析为组件?至少,它应该分解成这些组件:街道信息、州、邮编、国家
7 回答
与库/语言无关的解决方案是为此使用 Google 的地理编码器。它可以返回有关给定地址的详细分解信息。
http://code.google.com/apis/maps/documentation/services.html#Geocoding_Structured
如果您的数据的格式都非常相似,请将此用作示例。正如 Strager 所指出的,在大多数情况下,数据会有太多变化而无法有效地使用正则表达式。
假设您的输入格式为:
[Street Name], [State], [ZIP], [Country]
这个正则表达式可以解决问题:
m/^(.+?),(.+?),([0-9]+),(.+)$/
但是正则表达式相当复杂。如果您打算将其用于任何重要的事情,我建议您花时间学习它们。我一直发现“正则表达式备忘单”非常有用。
如果你在谈论预先存在的数据,祝你好运。如果这是您可以控制输入的内容,我建议在输入级别创建地址不同部分的分隔。只是一个建议。
这是一个使用 pyparsing解析街道地址的 Python 版本。它不是 PHP,但可能会让您对问题的复杂性有所了解。
问题是地址本身有各种形式和大小,它们不是自我验证的实体。这意味着如果不手动检查地址(即使这样也容易出错)或使用某种地址验证软件(无论是基于桌面的软件还是在线的),就无法真正知道您是否做对了.
有许多地址验证 Web 服务可以获取地址并将其分解为其组成部分,并以安全的方式进行,结果已被证明是有效的。
我应该提一下,我是 SmartyStreets 的创始人。我们会进行地址验证,其中包括您针对美国地址询问的功能。我们的旗舰产品是 US Address API,它是一个地址验证 Web 服务 API。
我找到了一个 php 地址解析器,它是为波兰设计的,但经过一些修改可能会在其他地方工作: