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

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

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

我错过了什么?

4

8 回答 8

59

strposfalse如果未找到该字符串,并且0在开头找到该字符串,则返回。使用恒等运算符区分两者:

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

顺便说一句,官方文档中用红色背景和感叹号记录了这一事实。

于 2011-08-08T19:30:02.393 回答
9

strpos()函数区分大小写。

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

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

于 2015-06-24T07:34:25.750 回答
5
if (strpos($filename, $match) === false)

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

===运算符还将比较变量的类型(布尔值!=整数)

于 2011-08-08T19:30:33.490 回答
2
false === strpos($filename, $match)

如果未找到或在位置上找到,则Docsstrpos函数返回(程序员喜欢经常开始计数):false000

警告此函数可能返回 Boolean FALSE,但也可能返回计算结果为 的非布尔值FALSE,例如0""。请阅读有关布尔值的部分以获取更多信息。使用===操作符来测试这个函数的返回值。

于 2011-08-08T19:30:24.690 回答
1

strposfalse如果未找到该字符串,并且0在开头找到该字符串,则返回。

所以试试这个:

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

请注意,我们使用严格比较 ( ===) 如果不使用,则两种类型(falsefalse或整数)都将被强制转换为相同的类型,而0当被强制转换为 bool 时,则为false.

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

于 2021-03-04T11:57:33.130 回答
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();
}
于 2019-01-22T09:27:45.560 回答
0

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

于 2019-11-06T10:29:14.907 回答
-1

在这种情况下,strpos 将返回一个零,然后在您执行逻辑否定时将其解释为 false。您应该明确检查 boolean false

于 2011-08-08T19:31:59.960 回答