正则表达式没有返回true

时间:2014-07-07 18:58:17

标签: php regex

我努力将.htaccess规则转换为PHP正则表达式if语句,这里是htaccess中的规则

RewriteRule ^user/([a-zA-Z0-9-]+)$ user.php?slug=$1 [L]

现在对于PHP我已经尝试了几种方法,因为我对REGEX不太好看似乎没有用。

if(preg_match("#user\/(a-z_\-0-9)\$#",$request)) {
        exit("okKKKKKK");
    } else {
        exit("no");
    }

$ request是" / user / test-user"谁能帮我一把?

3 个答案:

答案 0 :(得分:3)

您可以使用.htaccess中的相同正则表达式,只需在用户之前放置正斜杠。

if (preg_match("#^/user/([a-zA-Z0-9-]+)$#", $request)) { ...

Working Demo

答案 1 :(得分:1)

这不是正确的翻译。使用此等效的preg_match正则表达式:

preg_match("#^/user/([a-zA-Z0-9-]+)$#", $request);

请记住.htaccess中的重写规则缺少前导斜杠,因为.htaccess是每个目录指令。

答案 2 :(得分:0)

应该是这样的

if(preg_match("#^\/user\/[a-z_\-0-9]+\$#i",$request)) {
  exit("okKKKKKK");
} else {
   exit("no");
}

在我看来,如果用户存在,您还应该跟踪大写(i)修饰符并将301重定向设置为小写网址