【问题标题】:PHP regexp US addressPHP正则表达式美国地址
【发布时间】:2010-11-25 17:59:01
【问题描述】:

我正在尝试查看验证美国地址的好方法,我知道可能没有合适的方法来执行此操作,但我将采用基本方法:#,街道名称、城市、州和邮政编码。

任何想法将不胜感激。谢谢

【问题讨论】:

  • 您要使用正则表达式验证地址的哪一部分?整个事情,邮政编码?
  • 正如我之前所说,我正在尝试查看字符串是否以数字(任意大小)开头,后跟字母(街道名称)&(城市),以及两个字母的州代码。
  • 你刚才提到的问题是地址不必以数字​​开头(即 One Microsoft Way,邮政信箱),街道名称不必有字母(高速公路,编号的街道)。
  • 谢谢,我知道这一点,但正如我所提到的,我正在使用“通用基本格式”。

标签: php regex street-address


【解决方案1】:

地址的变化太多,无法使用正则表达式来做到这一点。您最好找到可以验证地址的 Web 服务。 USPS has one - 你必须申请使用它的权限。

【讨论】:

  • 其实不是变化,而是邮寄地址不规则。至少,我认为不是。如果有人可以证明它是,请这样做 - 我很感兴趣。
【解决方案2】:

不要尝试。有人可能有一个邮政信箱,或者一个公寓号码等,他们会对你很生气。即使是“正常”的街道名称也可以有数字,例如纽约市的第 125 街(以及许多其他街道)。即使是郊区也可以有一些编号的街道。

城市名称可以有空格。

【讨论】:

  • 我住在一条名为“East South Boulder Road”的街道上。即街道的东段,名为“South Boulder Road”。向询问我地址的人解释这件事非常有趣。
  • 在澳大利亚有一个叫1770。回答你下一个问题,不,邮政编码是4677。
  • 这些情况仍然应该可以使用复杂的正则表达式来解决。
【解决方案3】:

要求用户在单独的字段(街道名称、城市、州和邮政编码)中输入部分地址,并使用适用于此类字段的任何验证。这是一般做法。

或者,如果您想要匹配由三个逗号分隔的四个字符串的最简单的正则表达式,请尝试以下操作:

/^(.+),([^,]+),([^,]+),([^,]+)$/

如果匹配,您可以使用额外的模式匹配来检查地址的组成部分。无法检查街道地址的有效性,但您可以通过短信发送邮政编码和州代码。

【讨论】:

    【解决方案4】:

    这不是一个万无一失的解决方案,但假设地址以街道号的数字开头,以可以是 5 或 9 位数字的邮政编码结尾。

    ([0-9]{1,} [\s\S]*?[0-9]{5}(?:-[0-9]{4})?)

    就像我说的,它不是万无一失的,但我在过去使用它时取得了一定的成功。

    【讨论】:

      【解决方案5】:

      在新西兰,您可以从New Zealand Post 获得官方邮寄地址列表的许可 - 为您提供用新西兰每个有效邮寄地址填充表格所需的数据。

      对照此列表进行验证比尝试提出正则表达式要容易得多 - 而且准确度要高得多很多,因为您最终会遇到三种情况:

      • 您要验证的地址在列表中,因此您知道这是一个真实地址
      • 您正在验证的地址与列表中的地址非常相似,因此您知道它可能是真实地址
      • 您要验证的地址在列表中不相似,因此它可能是真实的,也可能不是真实的。

      使用 RegEx 可以获得的最佳效果是

      • 您要验证的地址与正则表达式匹配,因此它可能是真实地址
      • 您要验证的地址与正则表达式不匹配,因此它可能不是真实地址

      对于许多企业来说,需要知道邮政地址是很常见的情况,因此我相信在大多数地区都可以对列表进行许可。

      唯一的难点是定价。

      【讨论】:

        【解决方案6】:

        我同意萨尔曼的观点:让用户在不同的字段中输入数据(一个用于 zip,一个用于州,一个用于城市,一个用于#/街道名称。为每个字段使用不同的正则表达式。对于街道# /name 我想出的最好的表达方式是

        /^[0-9]{1,7} [a-zA-z0-9]{2,35}\a*/
        

        【讨论】:

        • 该正则表达式是否适用于复合名称或之后的 ST/DR/AVE?我在考虑“1234 Old Statesville Rd”或“123 Main ST”。街道名称部分不占用空格。
        猜你喜欢
        • 2016-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多