【问题标题】:php - validate street address with regular expressionphp - 使用正则表达式验证街道地址
【发布时间】:2017-06-24 16:49:30
【问题描述】:

我使用的是 php 版本 7.0.14。尽管在 stackoverflow 上有几个很好的例子,但我无法让我的 php 正则表达式工作。我已经尝试了几个小时的每一个可以想象的组合。问题在于试图允许必须转义的句点和斜杠。我试过用双引号和单引号将正则表达式括起来。我试过用一个反斜杠、二、三、四转义。它要么出错,要么让所有内容都通过(如 $),要么不允许句点和斜杠。

    $strStreet = "123 1/2 S. Main St. Apt. 1";
   #$strRegEx = "/^[a-z0-9 ,#-'\/]{3,50}$/i";
    $strRegEx = '/^[a-z0-9 ,#-\'\/]{3,50}$/i';
    if (preg_match($strRegEx, $strStreet) === 0 ) {
     print "bad address";
    }

提前感谢您的帮助。

【问题讨论】:

  • 谢谢 chris85 ...天才...如果你把你的答案作为答案,我可以给你信用
  • 哎呀...我只是注意到句号没有转义...为什么它不被解释为“任何字符”
  • 仅供参考,不建议同时使用地址和正则表达式smartystreets.com/articles/…

标签: php preg-match street-address


【解决方案1】:

这里有两个问题:

  1. 您的字符类中没有.(在字符类中,. 不需要转义)
  2. 字符类中的- 需要转义,或移到前端或末尾(在其他正则表达式引擎中,转义不可用)。它自己会在它的每一侧创建一系列字符。

所以:

^[-a-z0-9 ,#'\/.]{3,50}$

应该适合你。 (另外,如果您使用不同的分隔符,则不需要转义正斜杠)

演示:https://regex101.com/r/PfZAlO/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多