php 8.2 中判断字符串是否包含某内容最推荐使用 str_contains();需忽略大小写时用 stripos() 并严格判断 !== false;含中文等多字节字符时应使用 mb_strpos() 并指定 utf-8 编码;复杂模式才用 preg_match()。

PHP 8.2 中判断字符串是否包含某内容,最推荐、最简洁的方式是直接使用 str_contains() 函数——它专为此场景设计,返回布尔值,语义清晰,无需处理类型陷阱。
用 str_contains() 直接判断(首选)
这是 PHP 8.0+ 引入的原生函数,8.2 完全支持,无需额外兼容考虑:
- 语法简单:
str_contains($haystack, $needle) - 返回
true或false,可直接用于 if 条件 - 区分大小写,符合常规直觉
- 底层已做安全处理,不需担心
0 === false类型误判问题
示例:
php$text = "Welcome to PHP 8.2";
if (str_contains($text, "PHP")) {
echo "找到了"; // 输出
}
?>
需要忽略大小写时用 stripos()
当你要查的内容不区分大小写(比如用户输入不确定大小写),stripos() 仍是可靠选择:
- 返回首次匹配位置(整数)或
false - 必须用
!== false判断,不能用!= false或!$pos - 比先转小写再用 str_contains() 更高效,也更安全(避免 mb_convert_case 的编码风险)
示例:
$text = "The URL is HTTPS://EXAMPLE.COM";$pos = stripos($text, "https");
if ($pos !== false) {
echo "检测到 HTTPS 协议";
}
?>
处理中文等多字节字符要加 mb_ 前缀
如果字符串含中文、日文、emoji 等 UTF-8 多字节字符,strpos 和 str_contains 可能出错(它们按字节操作,非字符):
- 改用
mb_strpos($text, $needle, 0, 'UTF-8'),并显式指定编码 -
str_contains()对多字节不安全,不能替代mb_strpos() - 判断逻辑仍为
mb_strpos(...) !== false
示例:
$text = "你好,世界!";if (mb_strpos($text, "世界", 0, 'UTF-8') !== false) {
echo "中文子串存在";
}
?>
复杂模式匹配才用 preg_match()
仅在需要正则能力时使用,比如“包含数字+字母组合”“前后有边界限制”等:
- 模式如
"/\badmin\b/i"可精准匹配独立单词 admin - 注意过滤用户输入的搜索词,避免正则注入(建议用
preg_quote($user_input, '/')转义) - 性能低于 strpos 类函数,日常简单包含判断没必要上正则
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











