PHP中判断字符串包含关系的核心方法是使用strpos()函数,它返回子字符串首次出现的索引,若未找到则返回false,需用!== false进行严格比较以避免将0误判为不存在。对于区分大小写的场景,直接使用strpos();不区分大小写时推荐stripos(),比手动转换大小写更高效。处理多字节字符(如中文)时应使用mb_strpos()和mb_stripos(),并显式指定编码(如UTF-8),以避免字节操作导致的乱码或错误。PHP 8引入了str_contains()函数,语义清晰,直接返回true或false,简化了包含判断,但仅限8.0以上版本使用。此外,preg_match()适用于复杂模式匹配,strstr()/stristr()可用于获取子串后续内容,但判断存在性时不如strpos()轻量。最佳实践是根据PHP版本、字符编码、大小写敏感性和匹配复杂度选择合适方法。

在PHP中,检查一个字符串是否包含另一个字符串的核心方法是利用内置的字符串函数,例如
strpos()
strstr()
str_contains()
判断PHP字符串是否包含另一个字符串最常用且高效的方式是使用
strpos()
false
<?php
$mainString = "Hello, world! This is a PHP example.";
$subString1 = "world";
$subString2 = "PHP";
$subString3 = "Python";
// 检查是否包含 'world'
if (strpos($mainString, $subString1) !== false) {
echo "'{$mainString}' 包含 '{$subString1}'\n"; // 输出: 'Hello, world! This is a PHP example.' 包含 'world'
} else {
echo "'{$mainString}' 不包含 '{$subString1}'\n";
}
// 检查是否包含 'PHP'
if (strpos($mainString, $subString2) !== false) {
echo "'{$mainString}' 包含 '{$subString2}'\n"; // 输出: 'Hello, world! This is a PHP example.' 包含 'PHP'
} else {
echo "'{$mainString}' 不包含 '{$subString2}'\n";
}
// 检查是否包含 'Python'
if (strpos($mainString, $subString3) !== false) {
echo "'{$mainString}' 包含 '{$subString3}'\n";
} else {
echo "'{$mainString}' 不包含 '{$subString3}'\n"; // 输出: 'Hello, world! This is a PHP example.' 不包含 'Python'
}
?>核心点在于 !== false
strpos()
0
0
false
!==
在实际开发中,我们经常会遇到需要区分大小写或不区分大小写地检查字符串包含关系的需求。这两种场景各有其最佳实践方法。
立即学习“PHP免费学习笔记(深入)”;
区分大小写(Case-sensitive)
默认情况下,
strpos()
"Hello"
"Hello"
<?php
$text = "Apple Pie";
if (strpos($text, "apple") !== false) {
echo "包含 'apple' (区分大小写)\n";
} else {
echo "不包含 'apple' (区分大小写)\n"; // 输出: 不包含 'apple' (区分大小写)
}
?>我个人在写代码时,如果对大小写有明确要求,通常会直接用
strpos
不区分大小写(Case-insensitive)
对于不区分大小写的判断,PHP提供了
stripos()
strpos()
<?php
$text = "Apple Pie";
if (stripos($text, "apple") !== false) {
echo "包含 'apple' (不区分大小写)\n"; // 输出: 包含 'apple' (不区分大小写)
} else {
echo "不包含 'apple' (不区分大小写)\n";
}
?>如果用户输入可能大小写混淆,
stripos
strpos()
<?php
$text = "Apple Pie";
$search = "apple";
if (strpos(strtolower($text), strtolower($search)) !== false) {
echo "包含 'apple' (通过转换大小写实现不区分大小写)\n"; // 输出: 包含 'apple' (通过转换大小写实现不区分大小写)
}
?>虽然这种方法也能达到目的,但通常
stripos()
当处理包含中文、日文、韩文或其他非ASCII字符的多字节字符串时,
strpos()
stripos()
strpos()
为了正确处理多字节字符串,PHP提供了
mb_strpos()
mb_stripos()
mb_
<?php
// 确保PHP环境已启用mbstring扩展
// ini_set('default_charset', 'UTF-8'); // 通常在php.ini中设置
// mb_internal_encoding("UTF-8"); // 也可以在代码中设置内部编码
$mainString = "你好世界,这是一个PHP示例。";
$subString1 = "世界";
$subString2 = "PHP";
$subString3 = "Python";
// 使用 mb_strpos 区分大小写判断
if (mb_strpos($mainString, $subString1, 0, 'UTF-8') !== false) {
echo "'{$mainString}' 包含 '{$subString1}' (多字节区分大小写)\n"; // 输出: '你好世界,这是一个PHP示例。' 包含 '世界' (多字节区分大小写)
}
// 使用 mb_stripos 不区分大小写判断
$mainStringCase = "Hello世界,这是一个php示例。";
$subStringCase = "php";
if (mb_stripos($mainStringCase, $subStringCase, 0, 'UTF-8') !== false) {
echo "'{$mainStringCase}' 包含 '{$subStringCase}' (多字节不区分大小写)\n"; // 输出: 'Hello世界,这是一个php示例。' 包含 'php' (多字节不区分大小写)
} else {
echo "'{$mainStringCase}' 不包含 '{$subStringCase}' (多字节不区分大小写)\n";
}
?>这块我踩过坑,尤其是处理中文、日文这类字符串时,一开始没注意
mb_*
mb_
mb_strpos()
mb_stripos()
'UTF-8'
mb_internal_encoding()
除了上述的
strpos
mb_strpos
1. preg_match()
当你的判断逻辑不仅仅是简单的子字符串匹配,而是涉及更复杂的模式(比如“以某个词开头”、“包含数字和字母的组合”等)时,正则表达式就成了不二之选。
preg_match()
<?php
$text = "My email is test@example.com.";
$pattern1 = '/email/'; // 查找 "email"
$pattern2 = '/[0-9]+/'; // 查找一个或多个数字
$pattern3 = '/^[A-Za-z]+/'; // 查找以字母开头的字符串
$pattern4 = '/test@example\.com/i'; // 不区分大小写查找邮箱地址
if (preg_match($pattern1, $text)) {
echo "文本包含 'email' (通过正则)\n"; // 输出: 文本包含 'email' (通过正则)
}
if (preg_match($pattern2, $text)) {
echo "文本包含数字 (通过正则)\n";
} else {
echo "文本不包含数字 (通过正则)\n";
}
if (preg_match($pattern4, $text)) {
echo "文本包含邮箱地址 (通过正则不区分大小写)\n"; // 输出: 文本包含邮箱地址 (通过正则不区分大小写)
}
?>有时候,简单的
strpos
preg_match()
1
0
false
2. strstr()
stristr()
strstr()
stristr()
false
false
<?php
$mainString = "The quick brown fox jumps over the lazy dog.";
$subString = "fox";
if (strstr($mainString, $subString) !== false) {
echo "包含 '{$subString}' (通过 strstr)\n"; // 输出: 包含 'fox' (通过 strstr)
}
// stristr() 不区分大小写
if (stristr($mainString, "FOX") !== false) {
echo "包含 'FOX' (通过 stristr)\n"; // 输出: 包含 'FOX' (通过 stristr)
}
?>我个人用
strstr
strpos
3. str_contains()
对于PHP 8及更高版本,PHP引入了一个新的函数
str_contains()
true
false
!== false
<?php
// 仅限 PHP 8 及更高版本
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
$mainString = "Hello PHP 8!";
$subString = "PHP 8";
if (str_contains($mainString, $subString)) {
echo "包含 '{$subString}' (通过 str_contains)\n"; // 输出: 包含 'PHP 8' (通过 str_contains)
} else {
echo "不包含 '{$subString}' (通过 str_contains)\n";
}
// str_contains 是区分大小写的
if (str_contains($mainString, "php")) {
echo "包含 'php' (通过 str_contains)\n";
} else {
echo "不包含 'php' (通过 str_contains)\n"; // 输出: 不包含 'php' (通过 str_contains)
}
} else {
echo "当前PHP版本低于8.0,不支持 str_contains()。\n";
}
?>PHP 8 引入的
str_contains
!== false
str_contains()
strtolower()
strtoupper()
选择哪种方法取决于你的具体需求:简单的区分大小写判断用
strpos()
stripos()
mb_strpos()
mb_stripos()
preg_match()
str_contains()
以上就是php如何检查字符串中是否包含另一个字符串?php字符串包含判断方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号