Как использовать strpos, чтобы определить, существует ли строка в строке ввода?

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

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

В приведенном выше коде я пытаюсь вырваться из script, когда имя файла не содержит текстовую строку "my_upgrade". Однако в приведенном примере он не должен умирать, поскольку " my_upgrade (1).zip" содержит строку " my_upgrade".

Что мне не хватает?

Ответ 1

strpos возвращает false, если строка не найдена, и 0, если она найдена в начале. Используйте оператор идентификации, чтобы отличить два:

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

Кстати, этот факт документирован красным фоном и восклицательным знаком в официальной документации .

Ответ 2

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

В противном случае strpos вернет 0 (индекс совпадения), который равен false.

Оператор === также будет сравнивать тип переменных (boolean!= integer)

Ответ 3

Функция strpos() чувствительна к регистру.

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

Для использования без учета регистра. используйте stripos(), то есть он находит положение первого вхождения строки внутри другой строки (без учета регистра)

Ответ 4

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

Функция strpos Docs возвращает false, если не найдена или 0, если она найдена в позиции 0 (программисты любят часто начинать считать 0):

Предупреждение Эта функция может возвращать Boolean false, но может также возвращать небулевое значение, которое оценивается как false, например 0 или "". Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Ответ 5

Это работает для меня, когда все остальные терпят неудачу в некоторых ситуациях:

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

Ответ 6

strpos в этом случае возвращает ноль, который затем интерпретируется как false, когда вы выполняете логическое отрицание. Вы должны явно указывать для boolean false.