我在使用strpo()时遇到问题。让我们说字符串是" 51分钟"我正在检查" 1分钟"它仍然返回true,因为它不应该。修复是什么?我想只搜索1分钟。
代码:
if (strpos($str, '1 minute') !== false)
{
}
谢谢!
答案 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 );
答案 2 :(得分:0)
由于有人去了正则表达式过度杀伤路线,让我提供最简单的路线。 strpos
会返回匹配字符串的位置,而不仅仅是匹配的字符串。所以......
$str = "1 Minute here";
if(strpos($str, '1 Minute') === 0) {
echo 'Matched 1 Minute';
}
如果它位于0位置,则表示该字符串以 1分钟开头。假设你不想做任何疯狂的事情,比如查找单词的所有实例,这就足够了。否则,请使用正则表达式答案