2017-06-24 60 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/