php strpos()未正确检查

时间:2015-07-01 15:06:11

标签: php

我在使用strpo()时遇到问题。让我们说字符串是" 51分钟"我正在检查" 1分钟"它仍然返回true,因为它不应该。修复是什么?我想只搜索1分钟。

代码:

if (strpos($str, '1 minute') !== false)
{

}

谢谢!

3 个答案:

答案 0 :(得分:1)

您误解了strpos

的用法 如果找不到字符串,

strpos()将返回false,或者查找第一次出现的字符串的数字位置。它不会返回'true'。

要获得布尔结果,您可以像这样测试not false。 (注意使用试图匹配值和类型的!==。这可以避免0给你一个错误的结果。)

if(strpos($haystack, $needle) !== false) {
    // do something here
}

另请注意,由于某些令人讨厌的原因,'haystack'和'needle'与许多其他PHP字符串函数相反,这使得容易出错。

但是,当您尝试查找某个字符串,并且只查找某个字符串时,您需要使用直接比较,例如:

if($string == '1 Minute')

或使用正则表达式将完整的单词与以下模式匹配:

$pattern = '/\b1 Minute\b/';

然后可以像这样使用preg_match:

preg_match($pattern, $input_line, $output_array);

如果您以前没有使用过正则表达式,this网站非常适合帮助您创建模式,甚至可以为您提供要粘贴的代码行。

答案 1 :(得分:0)

使用preg_match()查找整个单词。

您正在寻找的代码:

$string = "Lorem ipsum 51 Minutes on StackOverflow";
$regex = "/\b1 Minute\b/";    

$match = preg_match( $string, $regex );

文档:http://php.net/manual/en/function.preg-match.php

答案 2 :(得分:0)

由于有人去了正则表达式过度杀伤路线,让我提供最简单的路线。 strpos会返回匹配字符串的位置,而不仅仅是匹配的字符串。所以......

$str = "1 Minute here";
if(strpos($str, '1 Minute') === 0) {
    echo 'Matched 1 Minute';
}

如果它位于0位置,则表示该字符串以 1分钟开头。假设你不想做任何疯狂的事情,比如查找单词的所有实例,这就足够了。否则,请使用正则表达式答案