$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
if(!strpos($filename, $match))
{
die();
}
else
{
//proceed
}
在上面的代码中,当文件名不包含文本字符串“my_upgrade”时,我正试图消失脚本。但是,在给出的示例中,它不应该死,因为“ my_upgrade(1).zip ”包含字符串“ my_upgrade ”。
我错过了什么?
答案 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
}
注意我们使用了严格比较 (===
) 如果我们不使用,两种类型(false
和 false
或整数)将被强制为相同类型,并且 { {1}} 强制为 bool 时为 0
。
更多详情:https://zdevtips.com/guid/strpos-in-php-example4-example-codes/
答案 7 :(得分:-1)
strpos将返回零,然后在执行逻辑否定时将其解释为false。您应该明确检查布尔值false
。