【问题标题】:Regular expression for street address街道地址的正则表达式
【发布时间】:2012-03-06 16:05:24
【问题描述】:

我正在尝试匹配包含街道和号码的街道地址。

我需要表达式来匹配街道名称的单词,然后是数字。

例如,我想匹配“somestreet 25”、“some other street 23”、“a-third street 190”,而不是“a_fourth street 67”。

我正在尝试使用它一个小时,但我什至对正则表达式还不够好。

到目前为止,我只有/^[a-zA-Z]+([\s][a-zA-Z]+)([\s][0-9]){1,4}$/,但不用说,它不起作用。

--- 编辑 ---

我知道没有标准的、全球性的街道地址书写方式,而且正则表达式不能真正复杂到涵盖全球范围内的问题,但该网站适用于当地餐馆,而且所有我希望地址看起来像一个地址(即使那样,如果没有地图和电话验证,它仍然可能是假地址)。

然而,在发送任何东西之前都会一直进行人工验证,而且它是一个相当小的社区,所以送货员和餐厅老板都知道订单是否是假的。

我想要的只是防止他们在地址中使用愚蠢的 !@#$ 字符发送垃圾邮件,并为他们提供一个体面的可读地址格式。

【问题讨论】:

  • 是什么让a_fourth street 67 不匹配?
  • @gms8994 下划线。
  • 您没有来自将数字放在首位的国家/地区的街道吗?还是给出建筑物名称但没有编号的区域?还是公寓楼用字母来识别建筑物的一部分? (贝克街 221B 号)?
  • 这永远不会在全局环境中工作,并且对于本地环境可能经常失败。
  • 在这种情况下它会起作用,因为应用程序过于本地化。远离全球。

标签: php regex


【解决方案1】:

这应该适用于您的示例:

/^[a-zA-Z]([a-zA-Z-]+\s)+\d{1,4}$/

【讨论】:

  • 如果 - 是第一个或最后一个字符,则不必添加 \。此外,您的模式将匹配 - - Road 38,这是不正确的。
  • 两方面都对!编辑修复。
  • 为什么要区分大小写?您可以使用 i 修饰符减少一些代码。
【解决方案2】:

你有点过于复杂了。这是一个不区分大小写的表达式,它查找带有连字符和空格的字母,后跟数字,符合您的规定条件。

/^([a-z- ]+)\s+([0-9]+)$/i

但是我呢?我住在30th Ave.

顺便说一句,我在末尾使用[0-9]+ 表示一个或多个数字,而不是您的{1,4} 范围。如果不能超过 4 个,则将其切换回您的范围 {1,4}

【讨论】:

  • 你不住在希腊,所以我的客户不会真正关心你:)。我愿意,不过我感谢你的时间。
【解决方案3】:

这样就可以了

 /^([A-Z][-A-Z ]+)\s+(\d+)$/i

我认为街道名称没有固定的格式。所以正则表达式不适用于此

【讨论】:

  • 该应用程序是针对一家餐馆的,日期格式的约定是(街道名称)后跟(数字),因此这里适用正则表达式。
猜你喜欢
  • 1970-01-01
  • 2012-03-12
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多