2015-12-21 88 views
1

這不是其中的一個「幫我構建我的正則表達式」的問題。我有一個HTML表單輸入字段,用戶可以以各種格式提供地理位置數據。以下正則表達式在regexr.com以及我的應用程序中正常工作。但是,我想在提交之前使用HTML5的「模式」參數來額外驗證用戶的輸入。 。HTML5使用包含引號的模式驗證文本輸入

((([E|W|N|S](\s)?)?([\-]?[0-1]?[(0-9)]{1,2})[°][ ]?([(0-5)]?[(0-9)]{1})([\.|,][0-9]{1,5})?['][ ]?([0-5]{0,1}[0-9]?(([\.|\,])[0-9]{0,3})?)([\"]|[']{2}){0,1}((\s)?[E|W|N|S])?)|([-]?[1]?[0-9]{1,2}[\.|,][0-9]{1,9})) 

的一點是,這個正則表達式包含引號(「)現在,我把這個正則表達式在我的輸入是這樣的:

<input type="text" pattern = "regex..."...." /> 

瀏覽器不能識別這個表達式也不要做任何驗證可言,所以很明顯,我需要逃脫報價我試了一下,到目前爲止:。

  • PHP的和addslashes()函數轉義字符太多
  • 我通過單個反斜線逃脫報價

這並沒有改變任何東西。我使用Chrome進行測試,使用簡單的正則表達式可以正常工作。上面的那個顯然太複雜了。

我知道上面的正則表達式對於匹配座標來說並不完美,但是,這裏不討論這個問題。我只想知道如何正確地轉義HTML5中的模式,因爲Chrome不會對該正則表達式做任何事情。

回答

3

使用HTML實體:

  • ,而不是'使用&apos;
  • ,而不是"使用&quot;

如果你使用PHP創建正則表達式,你可以使用htmlentities()來編碼使用HTML實體的字符串。默認情況下,這隻會編碼雙引號,但您可以使用ENT_QUOTES選項對兩種類型的引號進行編碼。

+0

謝謝,這就是解決方案...即使我經常使用htmlentities()來顯示數據,它並沒有發生在我身上,我可以用它來編碼我的正則表達式模式......非常感謝! – user3205494