【问题标题】:Parse A Steet Address into components [closed]将街道地址解析为组件[关闭]
【发布时间】:2009-11-16 02:35:15
【问题描述】:

有没有人有一个 php 类或正则表达式来将地址解析为组件?至少,它应该分解成这些组件:街道信息、州、邮编、国家/地区

【问题讨论】:

标签: php regex street-address


【解决方案1】:

与库/语言无关的解决方案是为此使用 Google 的地理编码器。它可以返回有关给定地址的详细分解信息。

http://code.google.com/apis/maps/documentation/services.html#Geocoding_Structured

【讨论】:

  • +1 看起来不错的资源。但请记住,它可能允许解析部分地址,这样如果你只给它国家和州,那么这种部分信息可能没问题,而如果你正在构建一个需要使用邮寄地址,这种无限制的津贴可能会反过来咬你。 耸耸肩
  • 您不能仅根据解析结果进行验证吗?也就是说,如果您不介意经常访问 Google。
  • 如果您的列表很大,则存在限制,那么您将不得不为谷歌地理编码付费......有更便宜的解决方案,例如 heremaps 或批量的 bing 地图。
【解决方案2】:

如果您的数据的格式都非常相似,请将此用作示例。正如 Strager 所指出的,在大多数情况下,数据的差异太大而无法有效地使用正则表达式。

假设您的输入格式为:

[Street Name], [State], [ZIP], [Country]

这个正则表达式可以解决问题:

m/^(.+?),(.+?),([0-9]+),(.+)$/

但是正则表达式相当复杂。如果您打算将其用于任何重要的事情,我建议您花时间学习它们。我一直觉得“Regular Expressions Cheat Sheet”很有用。

【讨论】:

  • 由于地址的可能形式很多,我认为正则表达式是不可行的。
  • +1 用于正则表达式备忘单,很有用,但我认为正则表达式不会成为开放地址字段的绝佳解决方案。
【解决方案3】:

如果您谈论的是预先存在的数据,祝您好运。如果这是您可以控制输入的内容,我建议在输入级别创建地址不同部分的分隔。只是一个建议。

【讨论】:

  • 我尽量保持界面简单。我想让用户能够简单地在文本区域中输入地址,然后我会尝试解析它。
  • 请记住,通过仅提供一个开放式字段,您实际上会使其更复杂,因为您没有为输入指定任何严格的要求,因此用户会- 以您无法解析的格式输入信息。最好提供单独的字段,然后为可能不符合您的模式的地址提供一个“其他地址信息”字段。
【解决方案4】:

这是用于解析街道地址的Python version using pyparsing。它不是 PHP,但可能会让您对问题的复杂性有所了解。

【讨论】:

    【解决方案5】:

    问题是地址本身有各种形式和大小,它们不是自我验证的实体。这意味着如果不手动检查地址(即使这样也容易出错)或使用某种地址验证软件(无论是基于桌面的软件还是在线的),就无法真正知道您是否做对了.

    有许多地址验证网络服务可以获取地址并将其分解为其组成部分,并以安全的方式进行,结果已被证明是有效的。

    我应该提到我是 SmartyStreets 的创始人。我们会进行地址验证,其中包括您针对美国地址询问的功能。我们的旗舰产品是美国地址 API,即address verification web service API

    【讨论】:

    • 尽管这个商业 SmartyStreets 提供声音,但请注意 - 它仅适用于美国。
    • 我们主页上的大字体我们说“USPS 地址验证”。这是我们的常见问题解答页面:smartystreets.com/kb/faq/do-you-verify-international-addresses这是 Google 在我们的网站上搜索“美国”时的结果google.com/search?q=site%3Asmartystreets.com+united+states
    • 很公平,删除了我对 disqus 的评论,但由于这种限制,SStreets 只是解决这个问题中提出的一般地址验证问题的部分解决方案。
    • @ArturBodera 我的答案独立于我所代表的组织。 OP 问题询问有关使用正则表达式将地址解析为其组成部分的问题。我的回答是地址本身不能自我验证,因此必须使用外部授权。尽管如此,为了清楚起见,我还更新了我的答案,以表明我们目前是一个仅限美国的系统。
    【解决方案6】:

    【讨论】:

    • 这是一款很酷的软件,但似乎并不能满足提问者的要求。它不是为用户提供地址的组成部分,而是标准化地址。有用,但不是所要求的。
    【解决方案7】:

    我找到了一个专为波兰设计的 php 地址解析器,但经过一些修改可能会在其他地方工作:

    PHP address parser

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      相关资源
      最近更新 更多