2017-03-18 106 views
-1

我有以下代碼:該功能的preg_match不接受符號「/」

$URI = "controller/method/parms"; 
    $pattern = "a-z0-9_-/"; 
    echo preg_match("/^[". $pattern ."]+$/i", $URI); 

因爲這個/符號,操作將失敗,出現此錯誤:
Warning: preg_match(): Unknown modifier ']'。但如果我刪除該符號,一切都會正常工作。

+1

逃生削減'$模式= 「A-Z0-9 _ \/- 」' – splash58

+0

@ splash58:謝謝你,你是對的。問題是按照符號的順序,它不應該把符號放在模式的末尾。 –

+0

真的,我沒有看到任何理由給我投票。 –

回答

2

逃離斜線和在字符類的末尾移動破折號:

$pattern = "a-z0-9_\/-"; 
preg_match("/^[". $pattern ."]+$/i", $URI); 

注:因爲它避開了破折號preg_quote不會在這種情況下工作,我不知道爲什麼。

你也可以使用其他分隔符:

$pattern = "a-z0-9_/-"; 
preg_match("~^[". $pattern ."]+$~i", $URI); 
+0

不幸的是,在這兩種情況下,錯誤消息仍然出現。 –

+0

@LionKing:對不起,我錯過了第二個參數:) – Toto

+0

如果'preg_quote()'包含'\ w'的'$ pattern','\ w'會被轉義並且不匹配。 – nickb