我想查看变量是否包含与硬编码列表中的几个值之一匹配的值。我正在使用以下内容,但最近发现它在某处有缺陷:
if (preg_match("/^(init)|(published)$/",$status)) {
echo 'found';
} else {
echo 'nope';
}
我发现如果变量 $status 包含单词“unpublished”,即使“unpublished”不在列表中,仍然存在匹配项,据说是因为单词“unpublished”包含单词“published”,但我认为正则表达式中的 ^ 和 $ 应该强制匹配整个单词。有什么想法我做错了吗?
最佳答案
修改您的模式:
$pattern = "/^(init|published)$/";
$contain = "unpublished";
echo preg_match($pattern, $contain) ? 'found' : 'nope' ;
此模式表示我们的字符串必须是 /^init$/
或 /^published$/
,表示从开始到结束的那些特定字符串。因此在这些约束下子字符串无法匹配。
关于php - 使用 PHP 的 preg_match 来查看某个值是否与值列表匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707583/