我在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;
}
}
答案 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';
}