2017-03-18 102 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