PHP如何判断一个字符串是否包含另一个字符串_PHP检查字符串包含关系的方法

尼克
发布: 2025-09-14 22:53:01
原创
365人浏览过
判断PHP字符串是否包含另一字符串,核心是使用strpos()或strstr()函数;前者返回位置,后者返回剩余部分,需用!==false判断是否存在;区分大小写时用strpos()/strstr(),不区分用stripos()/stristr();PHP 8.0+可用str_starts_with()/str_ends_with()判断开头结尾;多字节字符应使用mb_strpos()/mb_strstr()等多字节安全函数;正则匹配用preg_match()但需防注入;性能上strpos()略快于strstr(),实际差异通常可忽略。

php如何判断一个字符串是否包含另一个字符串_php检查字符串包含关系的方法

判断PHP字符串是否包含另一个字符串,核心在于使用

strpos()
登录后复制
strstr()
登录后复制
函数。前者返回子字符串首次出现的位置,后者返回子字符串开始到母字符串结束的部分。选择哪个取决于你是否需要位置信息以及返回值的类型。

解决方案

PHP提供了多种方法来判断一个字符串是否包含另一个字符串,最常用的是

strpos()
登录后复制
strstr()
登录后复制
函数。

  • strpos()
    登录后复制
    函数: 这是最常用的方法。它返回子字符串在母字符串中首次出现的位置。如果子字符串不存在,则返回
    false
    登录后复制

    立即学习PHP免费学习笔记(深入)”;

    $haystack = "This is a sample string.";
    $needle = "sample";
    
    $position = strpos($haystack, $needle);
    
    if ($position !== false) {
        echo "字符串 '$needle' 包含在字符串 '$haystack' 中,位置是: " . $position;
    } else {
        echo "字符串 '$needle' 不包含在字符串 '$haystack' 中。";
    }
    // 输出:字符串 'sample' 包含在字符串 'This is a sample string.' 中,位置是: 10
    登录后复制

    注意:

    strpos()
    登录后复制
    返回的是位置,从0开始计数。并且,因为
    false
    登录后复制
    转换为整数是 0,所以必须使用
    !==
    登录后复制
    来判断返回值是否为
    false
    登录后复制

  • strstr()
    登录后复制
    函数: 这个函数返回从子字符串第一次出现的位置开始到母字符串结束的部分。如果子字符串不存在,则返回
    false
    登录后复制

    $haystack = "This is a sample string.";
    $needle = "sample";
    
    $result = strstr($haystack, $needle);
    
    if ($result !== false) {
        echo "字符串 '$needle' 包含在字符串 '$haystack' 中,剩余部分是: " . $result;
    } else {
        echo "字符串 '$needle' 不包含在字符串 '$haystack' 中。";
    }
    // 输出:字符串 'sample' 包含在字符串 'This is a sample string.' 中,剩余部分是: sample string.
    登录后复制
  • stripos()
    登录后复制
    函数:
    strpos()
    登录后复制
    的不区分大小写的版本。

    $haystack = "This is a Sample string.";
    $needle = "sample";
    
    $position = stripos($haystack, $needle);
    
    if ($position !== false) {
        echo "字符串 '$needle' 包含在字符串 '$haystack' 中,位置是: " . $position;
    } else {
        echo "字符串 '$needle' 不包含在字符串 '$haystack' 中。";
    }
    // 输出:字符串 'sample' 包含在字符串 'This is a Sample string.' 中,位置是: 10
    登录后复制
  • stristr()
    登录后复制
    函数:
    strstr()
    登录后复制
    的不区分大小写的版本。

    $haystack = "This is a Sample string.";
    $needle = "sample";
    
    $result = stristr($haystack, $needle);
    
    if ($result !== false) {
        echo "字符串 '$needle' 包含在字符串 '$haystack' 中,剩余部分是: " . $result;
    } else {
        echo "字符串 '$needle' 不包含在字符串 '$haystack' 中。";
    }
    // 输出:字符串 'sample' 包含在字符串 'This is a Sample string.' 中,剩余部分是: Sample string.
    登录后复制

PHP判断字符串包含关系时,性能上有什么差异?

一般来说,

strpos()
登录后复制
strstr()
登录后复制
稍微快一些,因为它只需要找到子字符串的位置,而不需要返回剩余部分。 但是,在大多数情况下,这种性能差异可以忽略不计。选择哪个函数取决于你的具体需求。 如果你只需要知道子字符串是否存在,并且需要知道位置,那么
strpos()
登录后复制
是更好的选择。 如果你需要获取子字符串之后的部分,那么
strstr()
登录后复制
更合适。 不区分大小写时,
stripos()
登录后复制
stristr()
登录后复制
可能会稍微慢一些,因为它们需要进行额外的字符转换。但同样,除非在极端的性能敏感场景下,这种差异通常可以忽略。

如何判断一个字符串是否以另一个字符串开头或结尾?

PHP提供了

str_starts_with()
登录后复制
str_ends_with()
登录后复制
函数来判断字符串是否以特定字符串开头或结尾。 这两个函数从 PHP 8.0 开始可用。 如果你使用的是较早的 PHP 版本,可以使用
substr()
登录后复制
函数来模拟这些功能。

  • str_starts_with()
    登录后复制
    函数 (PHP 8.0+)

    快转字幕
    快转字幕

    新一代 AI 字幕工作站,为创作者提供字幕制作、学习资源、会议记录、字幕制作等场景,一键为您的视频生成精准的字幕。

    快转字幕 357
    查看详情 快转字幕
    $haystack = "This is a sample string.";
    $needle = "This";
    
    if (str_starts_with($haystack, $needle)) {
        echo "字符串 '$haystack' 以 '$needle' 开头。";
    } else {
        echo "字符串 '$haystack' 不以 '$needle' 开头。";
    }
    // 输出:字符串 'This is a sample string.' 以 'This' 开头。
    登录后复制
  • str_ends_with()
    登录后复制
    函数 (PHP 8.0+)

    $haystack = "This is a sample string.";
    $needle = "string.";
    
    if (str_ends_with($haystack, $needle)) {
        echo "字符串 '$haystack' 以 '$needle' 结尾。";
    } else {
        echo "字符串 '$haystack' 不以 '$needle' 结尾。";
    }
    // 输出:字符串 'This is a sample string.' 以 'string.' 结尾。
    登录后复制
  • 使用

    substr()
    登录后复制
    模拟
    str_starts_with()
    登录后复制
    (PHP 8.0 之前)

    $haystack = "This is a sample string.";
    $needle = "This";
    
    if (substr($haystack, 0, strlen($needle)) === $needle) {
        echo "字符串 '$haystack' 以 '$needle' 开头。";
    } else {
        echo "字符串 '$haystack' 不以 '$needle' 开头。";
    }
    // 输出:字符串 'This is a sample string.' 以 'This' 开头。
    登录后复制
  • 使用

    substr()
    登录后复制
    模拟
    str_ends_with()
    登录后复制
    (PHP 8.0 之前)

    $haystack = "This is a sample string.";
    $needle = "string.";
    
    if (substr($haystack, -strlen($needle)) === $needle) {
        echo "字符串 '$haystack' 以 '$needle' 结尾。";
    } else {
        echo "字符串 '$haystack' 不以 '$needle' 结尾。";
    }
    // 输出:字符串 'This is a sample string.' 以 'string.' 结尾。
    登录后复制

如何使用正则表达式判断字符串包含关系?

正则表达式提供了一种更灵活的字符串匹配方式。 你可以使用

preg_match()
登录后复制
函数来判断字符串是否匹配某个模式。

$haystack = "This is a sample string.";
$pattern = "/sample/"; // 匹配 "sample"

if (preg_match($pattern, $haystack)) {
    echo "字符串 '$haystack' 包含模式 '$pattern'。";
} else {
    echo "字符串 '$haystack' 不包含模式 '$pattern'。";
}
// 输出:字符串 'This is a sample string.' 包含模式 '/sample/'。
登录后复制

正则表达式的优点在于可以进行更复杂的匹配,例如匹配多个可能的字符串,或者匹配符合特定模式的字符串。例如,你可以使用

/s[a-z]+e/
登录后复制
来匹配以 "s" 开头,以 "e" 结尾,中间包含一个或多个小写字母的字符串。

如何处理多字节字符的字符串包含判断?

对于包含多字节字符(例如中文、日文、韩文)的字符串,需要使用

mb_strpos()
登录后复制
mb_strstr()
登录后复制
函数来正确处理字符编码。 这些函数是
strpos()
登录后复制
strstr()
登录后复制
的多字节安全版本。 确保你的 PHP 安装启用了
mbstring
登录后复制
扩展。

$haystack = "这是一个包含中文的字符串。";
$needle = "中文";

$position = mb_strpos($haystack, $needle);

if ($position !== false) {
    echo "字符串 '$needle' 包含在字符串 '$haystack' 中,位置是: " . $position;
} else {
    echo "字符串 '$needle' 不包含在字符串 '$haystack' 中。";
}
// 输出:字符串 '中文' 包含在字符串 '这是一个包含中文的字符串。' 中,位置是: 5
登录后复制

同样,也有

mb_stripos()
登录后复制
mb_stristr()
登录后复制
函数,用于不区分大小写的多字节字符串匹配。

如何避免在判断字符串包含关系时出现安全问题?

当处理用户输入时,需要特别注意安全问题。 如果你将用户输入直接用于正则表达式,可能会导致正则表达式注入攻击。 为了避免这种情况,应该对用户输入进行适当的验证和转义。

另外,在使用

strpos()
登录后复制
或其他字符串函数时,要确保你的代码能够正确处理各种可能的输入,包括空字符串、特殊字符等。 始终进行充分的测试,以确保你的代码的健壮性和安全性。

以上就是PHP如何判断一个字符串是否包含另一个字符串_PHP检查字符串包含关系的方法的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号