PHP正则表达式美国地址

时间:2009-09-04 19:22:26

标签: php regex street-address

我正在尝试查看验证美国地址的好方法,我知道可能没有一种正确的方法可以做到这一点,但我会采用基本方式:#,街道名称,城市,州和邮政编码。

任何想法都会欣赏它。感谢

6 个答案:

答案 0 :(得分:4)

不要试试。有人可能会有邮局信箱或公寓号码等等,他们真的会和你发生冲突。即使是“正常”的街道名称也可以包含数字,例如纽约市的第125街(以及许多其他地方)。即使是郊区也可以有一些编号的街道。

城市名称可以有空格。

答案 1 :(得分:4)

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

或者,如果你想要最简单的正则表达式匹配由三个逗号分隔的四个字符串,试试这个:

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

如果匹配,您可以使用其他模式匹配来检查地址的组成部分。没有办法检查街道地址的有效性,但您可以发送邮政编码和州代码。

答案 2 :(得分:2)

地址的变化太多,无法使用正则表达式执行此操作。您最好找一个可以验证地址的Web服务。 USPS has one - 您必须获得使用权限。

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

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

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

就像我说的那样,它不是防弹的,但过去我用它的边缘成功。

答案 5 :(得分:0)

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

对此列表进行验证比尝试使用正则表达式要容易得多 - 并且准确性也高得多 ,因为最终会出现三种情况:

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

RegEx的最佳效果是

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

对于许多企业来说,需要了解邮政地址是一种非常普遍的情况,所以我相信在大多数地区都可以获得许可列表。

唯一的关键是定价。