最近访客

PHP 函数笔记:stripos() 和 strpos() 的区别

一、函数定义

strpos()

 
int|false strpos(string $haystack, string $needle, int $offset = 0)
  • 作用:查找子字符串在目标字符串中首次出现的位置。

  • 特点区分大小写

  • 返回值

    • 找到时 → 返回位置(从 0 开始)。

    • 未找到时 → 返回 false


stripos()

 
int|false stripos(string $haystack, string $needle, int $offset = 0)


  • 作用:和 strpos() 类似。

  • 特点不区分大小写

  • 返回值:同样是找到位置或 false


二、示例代码对比

1. 使用 strpos()(区分大小写)

$keyword = "Silicone baking mat";

var_dump(strpos($keyword, "Silicone")); // int(0) ✅ 找到,位置0
var_dump(strpos($keyword, "silicone")); // bool(false) ❌ 找不到

因为 strpos() 区分大小写,所以 "silicone""Silicone" 不一样。


2. 使用 stripos()(不区分大小写)

$keyword = "Silicone baking mat";

var_dump(stripos($keyword, "Silicone")); // int(0) ✅ 找到,位置0
var_dump(stripos($keyword, "silicone")); // int(0) ✅ 找到,位置0
var_dump(stripos($keyword, "SILICONE")); // int(0) ✅ 找到,位置0

无论大小写如何,都能正确匹配。


三、常见使用场景

  • strpos() 的场景
    当你需要严格匹配大小写时,比如:

    • 校验密码中是否包含大写字母。

    • 检测固定格式的标识符。

  • stripos() 的场景
    当你只是想判断是否包含关键词,不关心大小写时,比如:

    • 搜索产品描述中的关键词(iron / Iron / IRON 都算命中)。

    • 文本过滤、敏感词检测。


四、注意事项

  1. 返回值是 位置(整数)或者 false,不要直接用 == false 判断,否则可能误判位置 0 为没找到。

     
    if (strpos("abc", "a") == false) {
        echo "没找到"; // ❌ 实际上位置是0,但也会进入这里
    }

    正确写法:

     
    if (strpos("abc", "a") !== false) {
        echo "找到了"; // ✅
    }
  2. stripos() 在处理多语言(尤其是带重音符号的字符)时,行为可能和预期不完全一致,涉及字符编码问题。


五、总结

  • strpos() → 区分大小写

  • stripos() → 不区分大小写

  • 判断是否找到时,一定要用 !== false

选择哪个函数,取决于你是否需要区分大小写。


👉 建议在写代码时,如果处理电商站点商品关键词、搜索过滤之类的逻辑,用 stripos() 更合适;如果是严格规则匹配(如格式校验),用 strpos()

温馨提示: 本文最后更新于2025-08-28 19:13:24,若文章内容或图片失效,请留言或联系站长反馈!
本站资源均仅供学习和研究使用,请在下载后24小时内删除!
© 版权声明
THE END
点赞75 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容