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.
Tag: PHP 字符串 函数