[英]PHP router with switch statement and regular expressions not working
我在 php 中有這段代碼:
$route = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
switch ($route) {
case '':
echo "root";
break;
case '/':
echo "root";
break;
case (preg_match("/^[a-zA-Z0-9-_]+$/", $route) ? true : false):
echo "db";
break;
default:
header("HTTP/1.0 404 Not Found");
http_response_code(404);
print(http_response_code());
break;
}
正則表達式必須匹配所有包含字母數字字符和 - 和 _ 的路由。 但它沒有,而是全部滑到默認選項 404。
可能是開關內部的預匹配有問題。 請幫忙。
有幾個問題:
REQUEST_URI
將返回帶有前導/
的字符串,因此您必須將其添加到您的正則表達式中: /^\/[a-zA-Z0-9-_]+$/
switch
檢查case
值是否與提供的值匹配,所以你應該將它與true
而不是$route
進行比較:switch (true) {
case $route == '':
...
case $route == '/':
...
case preg_match("/^\/[a-zA-Z0-9-_]+$/", $route):
...
}
但在那種情況下,最好使用簡單的 if 條件:
if (empty($route) || $route == '/') {
echo 'root';
return; // Use early return in order not to jump to other cases
}
if (preg_match("/^\/[a-zA-Z0-9-_]+$/", $route)) {
echo 'db';
return;
}
header("HTTP/1.0 404 Not Found");
http_response_code(404);
print(http_response_code());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.