2015-01-12 55 views
1

我想驗證以下URL是否正確。允許在正則表達式中使用其他特殊字符

$a = '/foo-bar-tar'; 
$b = '/foo-&-tar2'; 
$a = '/foo-bar-tar.'; 
$a = '/foo-bar.[tar]'; 
$a = '/foo-bar-tar'; 

總而言之,這些都是我願意接受,在沒有特別命令的字符:

/ - & [ ] () . 

當然字母和數字的和:

a-z A-Z 0-9 

的問題是我可以驗證字母,數字和特殊字符,如/.-,但我在驗證()[]時遇到問題 - 我猜是因爲這些是正則表達式語言的一部分即

這裏是我到目前爲止的模式:

^(/[a-z-A-z-0-9.]+)$ 

它匹配字母,數字和.,但我不知道如何使它爲()[]工作。

+5

建議您閱讀正則表達式中有關__escaping__「特殊字符」的內容 - http://www.regular-expressions.info/characters.html –

回答

1

嘗試的圖案的以下適應代替:

^\/[a-zA-Z0-9\-&\[\]().]+$ 

Regular expression visualization

Debuggex Demo(單元測試用於在問題的所有樣品輸入字符串)

要點:

  • ^ - 匹配/你期望
  • [a-zA-Z0-9\-&\[\]().]+開幕 - - 輸入字符串
  • \/開始一個或多個(+)字母(a-zA-Z0-9)或允許的特殊字符(\-&\[\]().)與-[,並]在字符類轉義由於在這方面
  • $其特殊的意義 - 輸入字符串的結尾相匹配

而且,我做不保留分組parens(即()),因爲它們對由^$限制的模式以及只有一個興趣匹配(即整個輸入字符串)沒有多大意義。

+0

嗨,對不起。我認爲Js和PHP的正則表達式是一樣的。這實際上對JS有效嗎?我的意思是作爲Json存儲? –

+0

你可以用正則表達式做的很多事情在PHP和JS中都是一樣的,但是還是有區別的。有關更多信息,我將遵循[有關PHP和JS中正則表達式之間差異的相關SO解答](http://stackoverflow.com/a/9072234/1810429)。 – J0e3gan