str_starts_with 是 php 8.0 引入的原生函数,用于严格判断字符串是否以指定子串开头,返回布尔值;支持空串始终为真、长前缀安全返回假,区分大小写,多字节字符需配合 mb_strtolower 使用。

str_starts_with 是 PHP 8.0 引入的原生函数,用于快速判断一个字符串是否以指定子串开头,返回布尔值(true 或 false),简洁安全,无需手动处理大小写或边界问题。
基本用法:两个参数,直接判断
函数签名:str_starts_with(string $haystack, string $needle): bool
-
$haystack:要检查的主字符串(被搜索的字符串) -
$needle:要匹配的前缀(不能为null,否则会报TypeError)
示例:
✔️ 正确用法var_dump(str_starts_with("Hello World", "Hello")); // true<br>var_dump(str_starts_with("PHP is fun", "PHP")); // true<br>var_dump(str_starts_with("abc123", "abc")); // true<br>var_dump(str_starts_with("test", "xyz")); // false
注意空字符串和长度边界
当 $needle 为空字符串 "" 时,函数始终返回 true(因为空串是任何字符串的合法前缀)。
如果 $needle 比 $haystack 还长,也安全返回 false,不会报错或警告。
str_starts_with("a", "") → truestr_starts_with("", "a") → falsestr_starts_with("hi", "hello") → false
不区分大小写?需自行转换
str_starts_with 是严格区分大小写的。如需忽略大小写,可配合 str_starts_with() + strtolower() 使用:
str_starts_with(strtolower($text), strtolower($prefix))- 注意:对含多字节字符(如中文、emoji)的字符串,应改用
mb_strtolower()并指定编码,例如:str_starts_with(mb_strtolower($text, 'UTF-8'), mb_strtolower($prefix, 'UTF-8'))
替代方案对比(PHP
低版本常用写法有风险:
-
substr($str, 0, strlen($prefix)) === $prefix—— 若$prefix为空会出错 -
strpos($str, $prefix) === 0—— 若$prefix为"0"可能误判(strpos返回0表示找到,但==会把0 == false当成假)
而 str_starts_with 内部已处理所有边界情况,更可靠、语义更清晰。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











