2017-06-24 61 views
2

我使用的是PHP版本7.0.14。尽管在stackoverflow上有几个很好的例子,我无法让我的PHP正则表达式工作。我一直在尝试几个小时,每一个可以想象的组合。问题在于试图允许周期和斜杠,这些必须逃脱。我试图用双引号和单引号括起正则表达式。我试着用一个反斜杠,两个,三个,四个来转义。它要么出错,要么通过所有的东西(如$)或不允许周期和斜线。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"; 
    } 

在此先感谢您的帮助。

+0

感谢chris85 ... ...天才,如果你把你的答案,因为答案我可以给你credit –

+0

oops ...我刚刚注意到这段时间没有逃脱...为什么它不被解释为“任何字符” –

+0

只是一个fyi,不建议使用地址和正则表达式https://smartystreets.com/文章/常规表达式换街道地址 – camiblanch

回答

2

您这里有两个问题:

  1. 有你的性格类没有.(以字符类的.并不需要进行转义)
  2. -在字符类需要被转义或移动到前端或结尾(在其他正则表达式引擎中,转义不可用)。它自己在它的每一侧创建一系列的字符。

这样:

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

应该为你工作。 (另外,如果你使用一个不同的分隔符正斜杠将不需要进行转义)

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