Как использовать strpos, чтобы определить, существует ли строка во входной строке? - PullRequest
19 голосов
/ 08 августа 2011
$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';

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

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

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

Ответы [ 6 ]

48 голосов
/ 08 августа 2011

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

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

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

5 голосов
/ 08 августа 2011
if (strpos($filename, $match) === false)

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

Оператор === также сравнивает тип переменных (булево! = Целое число)

4 голосов
/ 24 июня 2015

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

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

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

2 голосов
/ 08 августа 2011
false === strpos($filename, $match)

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

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

0 голосов
/ 22 января 2019

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

$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();
}
0 голосов
/ 08 августа 2011

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

...