带有preg_match

时间:2017-06-01 22:14:20

标签: php regex preg-match

我在switch语句中创建一个preg_match()有一些问题。

我想编写匹配/ oop / page / view / [some-number]的preg_match。

现在它的工作方式如下:

如果我在浏览器http://example.com/oop/page/view/1中运行其节目' 404页面'。 当我运行一些地址例如http://example.com/oop/page/view/test或甚至/ oop / test它运行第二个案例并且不知道如何。我的正则表达式确实存在问题。

public function check(){
    $url = filter_input(INPUT_GET, 'url');
    switch ($url) {
        case '':
            echo 'HomePage';
            break;
        case preg_match('#^/oop/page/view/\d+$#', $url):
            echo $url;
            break;
        default:
            echo '404 page';
            break;
    }

}

2 个答案:

答案 0 :(得分:1)

你应该做的事情是这样的:

switch (true) {
  case preg_match(...):

我不记得PHP中的开关是严格的还是松散的比较,但是如果它是严格的,只需在每个案例前放一个!!来将它转换为布尔值。

答案 1 :(得分:1)

switch语句将每个case表达式与switch()中的原始表达式进行比较。所以

case preg_match('#^/oop/page/view/\d+$#', $url):

类似于:

if ($url == preg_match('#^/oop/page/view/\d+$#', $url))

这显然不是你想要的。如果您想测试不同类型的表达式,请不要使用switch(),请使用if/elseif/else

if ($url == '') {
    echo 'Homepage';
} elseif (preg_match('#^/oop/page/view/\d+$#', $url)) {
    echo $url;
} else {
    echo '404 page';
}