【问题标题】:Validate Street Address Format验证街道地址格式
【发布时间】:2018-11-04 21:50:03
【问题描述】:

我正在尝试使用正则表达式验证 Google 表单中街道地址的格式。我无法确认它是真实地址,但我想至少验证该字符串是:

[数字(最多 6 位数字)] [单词(最少 1 到最多 8 个单词) 和数字之间的空格和 # 允许)],[单词(最少 1 到最多 4 个单词,只有字母)],[2 大写字母] [5位数字]

我希望我在括号之间留下的空格和逗号是必需的,正是我在上面的示例中放置它们的位置。这将验证

123 测试街,测试城市,TT 12345

这显然不是一个真实的地址,但至少它需要输入正确的格式。数据来自人们在表格上回答问题,所以它永远只是一个地址,没有名字。另外,它们的地址都是南佛罗里达州的一个地区,几乎所有地址都将匹配这种格式。我遇到的问题是人们没有进入城市或逗号,所以如果他们没有,我想给他们一个错误。到目前为止,我已经找到了这个

^([0-9a-zA-Z]+)(,\s*[0-9a-zA-Z]+)*$

但这不允许逗号之间有多个单词,或者 zip 的大写字母和数字。任何帮助都会为我省去很多麻烦,我将不胜感激。

【问题讨论】:

  • 每个单词有多少个字符/数字?
  • 这个话题之前已经出现过,正则表达式不是要走的路。 stackoverflow.com/questions/11160192/…
  • 我确实看到了关于这个的其他帖子,但我对此和答案的使用范围很窄。 G提供的似乎对我来说很完美。我不会遇到其他人必须处理的诸如邮政信箱和奇怪格式之类的问题,因为他们可能拥有更大的数据集。

标签: regex validation format street-address


【解决方案1】:

在处理街道地址时,确实需要考虑很多事情——比使用正则表达式有意义地处理的要多。此外,如果一个人在键盘上,输入错误的可能性总是很大,而且没有一个正则表达式可以解释所有可能的人为错误。

此外,根据您在收到地址后打算如何处理地址,您可能需要各种有用的信息,而这些信息仅通过使用正则表达式拆分粗略的地址组件是无法获得的。

作为 SmartyStreets 的软件开发人员(披露),我了解到 regular expressions really are the wrong tool for this job 因为地址并不像您想象的那样“常规”(标准化)。有更严格的验证工具可用,甚至是plugins you can install on your web form 来验证输入的地址,并返回wealth of of useful metadata and information

【讨论】:

    【解决方案2】:

    尝试正则表达式:

    \d{1,6}\s(?:[A-Za-z0-9#]+\s){0,7}(?:[A-Za-z0-9#]+,)\s*(?:[A-Za-z]+\s){0,3}(?:[A-Za-z]+,)\s*[A-Z]{2}\s*\d{5}
    

    Demo

    【讨论】:

    • 它与以下地址不匹配:751 FAIR OKS AVENUE PASADNA CA regex101.com/r/PuWFdz/1
    • @ErvinRuci,OP 的要求有强制逗号、空格和邮政编码
    • 我想就是这样!我们会看到,我相信有人会找到破解它的方法,但这是一个很好的起点,我可以在必要时进行调整。谢谢!
    【解决方案3】:

    也接受 Apt#:

    (^[0-9]{1,5}\s)([A-Za-z]{1,}(\#\s|\s\#|\s\#\s|\s)){1,5}([A-Za-z]{1,}\,|[0-9]{1,}\,)(\s[a-zA-Z]{1,}\,|[a-zA-Z]{1,}\,)(\s[a-zA-Z]{2}\s|[a-zA-Z]{2}\s)([0-9]{5})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      相关资源
      最近更新 更多