如何使用strpos来确定输入字符串中是否存在字符串?

时间:2011-08-08 19:28:12

标签: php strpos

$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';

if(!strpos($filename, $match))
    {
    die();
    }
else 
   {
   //proceed
   }

在上面的代码中,当文件名不包含文本字符串“my_upgrade”时,我正试图消失脚本。但是,在给出的示例中,它不应该死,因为“ my_upgrade(1).zip ”包含字符串“ my_upgrade ”。

我错过了什么?

8 个答案:

答案 0 :(得分:47)

如果找不到字符串,

strpos会返回false,如果在开头找到,则返回0。使用identity operator区分这两者:

if (strpos($filename, $match) === false) {

顺便说一下,这个事实记录在official documentation中有红色背景和感叹号。

答案 1 :(得分:5)

if (strpos($filename, $match) === false)

否则,strpos将返回0(匹配的索引),即false

===运算符还将比较变量的类型(boolean!= integer)

答案 2 :(得分:3)

strpos()功能区分大小写。

if(strpos($filename, $match) !== false)
        {
        // $match is present in $filename
        }
    else 
       {
       // $match is not present in $filename 
       }

使用不区分大小写。 使用stripos(),它找到第一次出现的字符串在另一个字符串中的位置(不区分大小写)

答案 3 :(得分:2)

false === strpos($filename, $match)

strpos functionDocs如果找不到,则返回false;如果在0位置找到0(程序员喜欢经常在0开始计算):

  

警告此函数可能会返回布尔FALSE,但也可能会返回一个非布尔值,其值为FALSE,例如0或{{ 1}}。有关更多信息,请阅读有关布尔值的部分。使用""运算符测试此函数的返回值。

答案 4 :(得分:0)

在某些情况下其他所有方法都失败时,这对我有用:

$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
    }
if ($checker === false)
{ 
die();
}
else 
{
//proceed
}

或者简而言之:

$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
//proceed
 }
if ($checker === false)
{ 
die();
}

答案 5 :(得分:0)

$data = 'match';
$line = 'match word in this line';
if(strpos($line,$data) !== false){
    echo "data found";
}else{
    echo "no data found";
}

答案 6 :(得分:0)

strpos 如果未找到字符串则返回 false,如果在开头找到则返回 0

试试这个:

if (strpos($filename, $match) === false) { 
       conditon
}

注意我们使用了严格比较 (===) 如果我们不使用,两种类型(falsefalse 或整数)将被强制为相同类型,并且 { {1}} 强制为 bool 时为 0

更多详情:https://zdevtips.com/guid/strpos-in-php-example4-example-codes/

答案 7 :(得分:-1)

在这种情况下,

strpos将返回零,然后在执行逻辑否定时将其解释为false。您应该明确检查布尔值false