Как использовать 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
.