当前位置: 首页> 最新文章列表> stripos 搜索失败返回 false,该如何优雅处理?

stripos 搜索失败返回 false,该如何优雅处理?

M66 2025-05-13

在 PHP 中,stripos() 是一个非常常用的函数,用于不区分大小写地查找字符串在另一个字符串中首次出现的位置。如果找到了,stripos() 会返回一个整数,表示匹配字符串在目标字符串中的起始位置;如果没找到,则返回 false

这里的问题就来了:由于返回的是“0false”,在条件判断中很容易出错。

举个常见的坑:

if (stripos($haystack, $needle)) {
    echo "找到了!";
} else {
    echo "没找到!";
}

这段代码如果 $needle$haystack 的开头(位置为 0),stripos() 返回 0,而 if (0) 会被当作 false,导致“没找到”的输出,逻辑错误!

正确的判断方式

要优雅地处理 stripos() 返回 false 的情况,我们应该明确判断是否为 false,而不是简单的布尔值判断:

$pos = stripos($haystack, $needle);
if ($pos !== false) {
    echo "找到了,在位置:$pos";
} else {
    echo "没找到!";
}

通过使用全等比较符 !==,我们可以精准地区分 0false

更进一步的封装:写一个小工具函数

为了让代码更清晰、可重用,我们可以封装一个辅助函数:

function containsIgnoreCase($haystack, $needle) {
    return stripos($haystack, $needle) !== false;
}

// 使用示例
if (containsIgnoreCase("https://m66.net/news", "NEWS")) {
    echo "包含关键词!";
} else {
    echo "不包含关键词!";
}

这样写代码既易读又减少了重复逻辑,非常适合在项目中广泛使用。

实战应用:判断用户访问来源是否包含某些关键词

假设我们需要判断用户访问的 URL 是否包含 utm_source