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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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