检查EXACT值是否在字符串中 - PHP

时间:2015-03-12 21:48:27

标签: php preg-match strpos

我已经阅读了很多关于如何查看值是否在字符串中的帖子。显然我的请求是不同的,因为多位代码没有100%工作。

我正在搜索字符串,需要确保EXACT值在那里 - 完美匹配。

$list="Light Rain,Heavy Rain";
$find="Rain";

这不应该与我需要做的事情相匹配。我需要它完全匹配。 我测试过的所有代码都说是匹配 - 我理解为什么。但是,由于Rain与Light Rain或Heavy Rain不同,我能做些什么来使它不匹配?我希望我有意义。

我已经尝试过strpos和preg_match,但同样,那些相同的匹配 - 但是出于我的目的,不是一个相等的匹配。

感谢可能最终成为DUH时刻的事情。

2 个答案:

答案 0 :(得分:2)

如果您需要完全匹配,$list始终以逗号分隔。为什么不这样检查呢?

$list = explode(',', "Light Rain,Heavy Rain");

var_dump(in_array('Rain', $list)); // false
var_dump(in_array('Heavy Rain', $list)); // true

如果你必须有正则表达式。

在你的正则表达式中,确保你在开始时检查字符串的开头或逗号(^|,),然后检查你的字符串,然后是另一个逗号或字符串(,|$)的结尾。 ?:使它们成为非捕获组,因此它们不会显示在$matches中。

$list = "Light Rain,Heavy Rain";

$test = 'Rain';
preg_match("/(?:^|,)($test)(?:,|$)/", $list, $matches);
var_dump(!empty($matches)); // false

$test = 'Heavy Rain';
preg_match("/(?:^|,)($test)(?:,|$)/", $list, $matches);
var_dump(!empty($matches)); // true

答案 1 :(得分:1)

试试这个:

$list="Light Rain,Heavy Rain";
$find="Light";
if(strpos($list,$find) !== false) 
{
    echo 'true';
}
else
{
    echo 'false';
}

致记:https://stackoverflow.com/a/4366748/4660348