У меня есть строка текста, представляющая собой имя файла, и я хочу показать ее, только если имя файла не содержит расширения изображения.
Это строковые структуры:
this-file-1.jpg
other_file.pdf
and-yet_another--file.zip
and-another-one.png
Я пробовал:
if ( strpos($value, 'jpg') === FALSE) {
echo $mostrarArchivos;
}
И это работает, но когда я пытаюсь это сделать, это не так:
if ( strpos($value, 'jpg') === FALSE ||
strpos($value, 'jpeg') === FALSE ||
strpos($value, 'png') === FALSE ||
strpos($value, 'gif') === FALSE
) {
echo $mostrarArchivos;
}
В том смысле, что он показывает строку с именем файла, даже если в строке написано whatever.jpg
Я понимаю, что это нужно делать по-другому, поэтому любое предложение более чем приветствуется.
Я предполагаю, что ваша строка будет содержать только одно имя файла, это правильно?
Я хотел бы знать, почему мне отказали. Я хотел бы знать, чтобы в следующий раз улучшить свой вопрос.






Это кажется гораздо более простым и гибким решением, так как вы можете легко добавлять или удалять расширения к массиву $invalid в любое время. Это также гарантирует, что вы тестируете фактическое расширение, а не последовательность символов в части имени файла, которая соответствует расширениям, которые вы хотите игнорировать.
$invalid = ['jpg','gif','png'];
$filename = 'hello_world.png';
if ( ! in_array(pathinfo($filename, PATHINFO_EXTENSION), $invalid) ) {
echo 'VALID EXTN ' . $filename . PHP_EOL;
} else {
echo 'INVALID EXTN ' . $filename . PHP_EOL;
}
Вы хотите использовать
&&(и), а не||(или). Есть гораздо более надежные способы получить расширение файла, кстати. Ваш не будет работать, если в фактическом имени присутствует "jpg" или другой.