strpos总是在php中返回true

时间:2014-03-28 18:16:49

标签: php string strpos

我写了这段代码:

$token="Birth";
$msg="I am awesome and I know it";

if(strpos(strtolower($msg),strtolower($token)) >=0){
    echo 'ok';
}

打印ok

我们可以看到消息中没有Birth之类的字词,但仍会返回true。我想它应该返回false,因为php手册说。

这方面的任何帮助,

4 个答案:

答案 0 :(得分:8)

如果找不到令牌,则

strpos()返回FALSE,如果找到令牌,则返回令牌的(第一个)位置。您需要使用严格比较运算符FALSE检查布尔值===,以确定是否在字符串中找到了令牌:

if(strpos(strtolower($msg),strtolower($token)) !== false){
    echo 'ok';
} else {
    echo 'not ok';
}

这是因为PHP的松散打字系统。如果您使用>=0,但未找到令牌,则PHP会在FALSE操作之前将strpos返回值0转换为>=0 >=0评估为TRUE

答案 1 :(得分:2)

如果找不到令牌,

strpos()将返回false。通过检查结果是否大于或等于零,将false转换为变为零的整数。所以零等于零,使你的if语句成立。

要解决此问题,只需查看strpos()是否返回false:

if(strpos(strtolower($msg),strtolower($token)) !== false)

答案 2 :(得分:1)

这是因为php自动播放。您还需要使用三重比较检查类型。

这样做:

$token="Birth";
$msg="I am awesome and I know it";
if(strpos(strtolower($msg),strtolower($token)) !== false)
  echo 'ok';

答案 3 :(得分:1)

小心strpos:

如果提供的变量中存在相应的字符串,则

strpos返回position (number),如果它根本不存在,则返回boolean FALSE。因此,如果你说if(strpos(...)>=0),它总是会评估为真,因为即使是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';

            }