[英]strpos returns true always in php
我写了这段代码:
$token="Birth";
$msg="I am awesome and I know it";
if(strpos(strtolower($msg),strtolower($token)) >=0){
echo 'ok';
}
打印ok
我们可以看到消息中没有像Birth
这样的词,但它仍然返回true
。 我猜它应该返回false
因为php手册说。
在这方面有任何帮助,
如果未找到令牌,则strpos()
返回FALSE
如果找到令牌,则返回令牌的(第一个)位置。 您需要使用严格比较运算符===
检查布尔值FALSE
,以确定是否在字符串中找到了令牌:
if(strpos(strtolower($msg),strtolower($token)) !== false){
echo 'ok';
} else {
echo 'not ok';
}
这是因为PHP的松散打字系统。 如果你使用>=0
,并且找不到令牌,PHP会在>=
操作之前将strpos
的FALSE
返回值转换为0
。 并且0 >=0
计算结果为TRUE
。
如果找不到令牌, strpos()
将返回false。 通过检查结果是否大于或等于零,将false转换为变为零的整数。 所以零等于零使你的if语句成立。
要解决这个问题,只需看看strpos()
返回false:
if(strpos(strtolower($msg),strtolower($token)) !== false)
这是因为php自动播放。 您还需要使用三重比较检查类型。
像这样做:
$token="Birth";
$msg="I am awesome and I know it";
if(strpos(strtolower($msg),strtolower($token)) !== false)
echo 'ok';
小心strpos:
如果提供的变量中存在相应的字符串,则strpos返回position (number)
,如果根本不存在,则返回boolean FALSE
。 因此,如果你说if(strpos(...)>=0)
,它总是会求值为true,因为即使boolean FALSE evaluates to 0
。 实现此功能的最佳方法是使用hard compare
。 说啊
if(strpos(strtolower($msg),strtolower($token)) !== FALSE){
// The above line will tell PHP that treat the condition as passed
// only when strpos does not return The boolean FALSE.
echo 'ok';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.