當前位置: 首頁> 最新文章列表> 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