繁体   English   中英

strpos总是在php中返回true

[英]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会在>=操作之前将strposFALSE返回值转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM