You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中strpos()检测字符串星号失效?已尝试多函数仍无效果

问题根源:PHP弱类型比较的陷阱

哦,这个问题我太熟悉了——你不小心踩了PHP弱类型比较的坑!

为什么strpos()看起来“失效”了?

先理清楚strpos()的返回规则:

  • 如果找到目标字符/字符串,返回它在原字符串中的索引位置(PHP里字符串索引从0开始计数)
  • 如果没找到,返回布尔值false

你的字符串是"****123",星号在最开头,所以strpos($str, '*')会返回0。但你用了== false做判断,PHP的弱类型比较会把0自动转换成布尔值false,导致条件错误成立,最终输出了“没有星号”的错误结果。

至于你尝试的stripos()、mb_strpos()这些函数,它们的返回规则和strpos()完全一致,所以也会遇到同样的问题。

修复方案:用严格比较符===

把判断条件改成严格等于(===)或者严格不等于(!==),这样PHP就不会做自动类型转换,能准确区分0(找到的位置)和false(未找到):

方案1:判断不存在时用=== false

$str = "****123";
if(strpos($str, '*') === false){
    echo 'There is no asterisk in the string';
} else {
    echo 'There is asterisk in the string';
}

方案2:判断存在时用!== false(更符合直觉)

$str = "****123";
if(strpos($str, '*') !== false){
    echo 'There is asterisk in the string';
} else {
    echo 'There is no asterisk in the string';
}

这两种写法都能正确识别字符串开头的星号,输出你期望的结果。

内容的提问来源于stack exchange,提问作者Arslan Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:27