PHP字符串函数strpos判断字符串是否存在中的一些坑,有时判断结果有误
Title 10345 Reply 0 Coin 0 Score 0
entry : 2020-05-22 10:42:39
update: 2021-11-11 10:42:39
show: 4733
#0. (Normal)

PHP字符串函数strpos判断字符串是否存在中的一些坑。

以下函数有坑,要注意:

strpos($str,'a’);  //字符串a 在$str 第一次出现的位置,索引0开始,没有出现返回false, 区分大小写。

stripos($str,'a’);  //同上,但是不区分大小写。

strrpos($str,'a’);  //字符串a 在$str,最后一次出现的位置,索引0开始,没有出现返回false,区分大小写。

strripos($str,'a’);  //同上,但是不区分大小写。

...

strpos为例(代码可以直接运行)

$str="abcdefghi";
if (strpos($str,"d")<=0) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"d")<=0 ('.strpos($str,"d").')  |-->Yes,正常没问题<br>';  //


$str="abcdefghi";
if (strpos($str,"a")<=0) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"a")<=0 ('.strpos($str,"a").')  |-->No,返回0,所以显示no<br>';  //

$str="我是华夏人我是汉族";
if (strpos($str,"汉")==false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"汉")==false ('.strpos($str,"汉").')  |-->Yes,正常没问题<br>'; //

$str="我是华夏人我是汉族";
if (strpos($str,"我")==false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"我")==false ('.strpos($str,"我").')  |-->No,返回0,0=false,所以显示no<br>'; //

$str="我是华夏人我是汉族";
if (strpos($str,"我")==0) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"我")==0 ('.strpos($str,"我").')  |-->No,因为返回0,0=0,所以显示no<br>';  //

$str="我是华夏人我是汉族";
if (strpos($str,"我")===false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"我")===false ('.strpos($str,"我").')  |-->Yes,正确结果<br>'; //

$str="1我是华夏人我是汉族";
if (strpos($str,1)===false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',1)===false ('.strpos($str,1).')  |-->No,1数字,返回false,<br>'; //

$str="1我是华夏人我是汉族";
if (strpos($str,"1")===false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',"1")===false ('.strpos($str,"1").')  |-->Yes,正确结果<br>'; //

$str="1我是华夏人我是汉族";
$s=1;
if (strpos($str,strval($s))===false) {
    echo "No";
} else {
    echo "Yes";
}
echo '  <--strpos('.$str.',strval('.$s.'))===false ('.strpos($str,strval($s)).')  |-->Yes,正确结果,最保险的办法,strval转化为字符<br>'; 

结果:

Yes <--strpos(abcdefghi,"d")<=0 (3) |-->Yes,正常没问题
No <--strpos(abcdefghi,"a")<=0 (0) |-->No,返回0,所以显示no
Yes <--strpos(我是华夏人我是汉族,"汉")==false (21) |-->Yes,正常没问题
No <--strpos(我是华夏人我是汉族,"我")==false (0) |-->No,返回0,0=false,所以显示no
No <--strpos(我是华夏人我是汉族,"我")==0 (0) |-->No,因为返回0,0=0,所以显示no
Yes <--strpos(我是华夏人我是汉族,"我")===false (0) |-->Yes,正确结果
No <--strpos(1我是华夏人我是汉族,1)===false () |-->No,1数字,返回false,
Yes <--strpos(1我是华夏人我是汉族,"1")===false (0) |-->Yes,正确结果
Yes <--strpos(1我是华夏人我是汉族,strval(1))===false (0) |-->Yes,正确结果,最保险的办法,strval转化为字符

总结:

1,索引0开始,用零判断,甚至用false判断都不完全对。最好用===false。

2,strpos的第二个参数必须是字符串型的。如果你是在循环或者多种情况下调用的strpos函数,不确定第二个参数的类型,最保险的方式是用strval把它转字符串类型了。


end.

【版权声明】
本文为原创,遵循CC 4.0 BY-SA版权协议!转载请附上原文出处链接及本声明。
原文链接:https://tdlib.com/am.php?t=Qb4vYpQ5Ojku

Tag:   PHP   字符串   函数   
分享链接:
还没有评论,快来抢沙发吧!
未登录,请先 [注册] or [登录]
(一分钟即可完成注册!)