PHP
Allen 2020-05-22 10:42:39 20372 0 0 0 0
PHP,字符串,函数,PHP字符串函数strpos判断字符串是否存在中的一些坑,有时判断结果有误

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 字符串 函数
我也要發一個   ·   返回首頁   ·   返回[PHP]   ·   前一個   ·   下一個
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[PHP]   ·   返回頂部