php 正则表达式 - cookie 名称

php regex - cookie name

我又需要帮助了。 我必须编写一个函数来获取 cookie。但我只知道部分 cookie 名称。我得到了一个运行良好的 JavaScript-函数:

function readCookie(cookiePart){            
            var results = document.cookie.match(cookiePart + '(.*)=(.*?)(;|$)');            
            if(results){
                var result = results[0].replace(cookiePart,''); 
                var cookie= result.split("="); 
                return(cookie[0])           
            }else{
                return null
            }
        }           
        alert(readCookie("cookie_"));

我尝试为 PHP 编写相同的代码。但还是卡住了:

$cookie_name = "cookie_";   
    if(!isset($_COOKIE["$cookie_name" . "/^*$/"])) {
        echo "Cookie named '" . $cookie_name . "' is not set!";
    } else {
        echo "Cookie '" . $cookie_name . "' is set!<br>";       
    }

我想我做错了正则表达式部分。也许你可以帮我在哪里添加它?我在定义或匹配时尝试了 varaiablename,但没有任何效果。

谢谢朋友们的提示!

function keyLike(array $arr, $like)
{
    foreach (array_keys($arr) as $k) {
        if (preg_match($like, $k)) {
            return true;
        }
    }

    return false;
}
...
if (keyLike($_COOKIE, '/^cookie_.+/')) { ...

问题

问题是,在 JavaScript 中你使用了一个方法 .match() 用于正则表达式,但你没有在 PHP 中使用任何正则表达式。

而且你不能那么容易地匹配键,你只能在遍历整个数组时这样做。

但您不必使用正则表达式来实现您所需要的。

解决方案

我推荐这个:

$set = false;
$cookie_name = 'cookie_';
foreach ($_COOKIE as $name => $value) {
    if (stripos($name,$cookie_name) === 0) {
        echo "Cookie named '$name' is set with value '$value'!";
        $set = true;
    }
}
if (!$set) {
    echo 'No cookie found :(';
}

将列出所有有效的 cookie(名称以 "cookie_" 开头),或显示悲伤消息。

而且我认为,如果您无需正则表达式就可以实现一些相对容易的事情,那么您应该这样做。

如果您之后需要使用 cookie 名称

使用修改后的代码:

$cookie_name = 'cookie_';
foreach ($_COOKIE as $name => $value) {
    if (stripos($name,$cookie_name) === 0) {
        $cookies[] = $name;
    }
}

您现在 table $cookies 包含每个有效 cookie 集的名称。如果您只需要 _ 之后的部分,请改用此行:

$cookies[] = str_replace('cookie_','',$name);