Как я могу preg_match слово внутри строки? - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь предварительно сопоставить имя файла для ".msi" и ".php", но даже если у файла такой тип файла, он не обнаружит его.

Здесьмой код:

$uploaded_type = $_FILES['image']['name'];
    if (preg_match('#\b(msi|php)\b#', $uploaded_type,)) { 
    echo $uploaded_type; }

Он продолжает проходить и никогда не обнаруживает его.файл, с которым я тестирую, называется "install.msi". Спасибо за помощь.

1 Ответ

0 голосов
/ 09 марта 2019

Ваш существующий код содержит опечатку с дополнительным ,, если вы используете его до версии php 7.3 . СМ. ЗДЕСЬ

<?php
$uploaded_type = 'install.msi';
if (preg_match('#\b(msi|php)\b#', $uploaded_type,)) { 
    echo $uploaded_type; 
}
?>

Выход для 7.3.0 - 7.3.3

install.msi

Выход для 7.1.25 -7.2.16

Ошибка разбора: синтаксическая ошибка, неожиданный ')' в строке 3 Процесс завершился с кодом 255.

Поэтому, когда я удаляю трейлингзапятая , тогда отлично работает. SEE

<?php
$uploaded_type = 'install.msi';
if (preg_match('#\b(msi|php)\b#', $uploaded_type)) { 
    echo $uploaded_type; 
}
?>

Но я бы предпочел non-regex способ с pathinfo() и in_array(), который будет работать для большинства версий php.Давайте сделаем это как -

<?php
$uploaded_type = 'install.msi';
$info = pathinfo($uploaded_type);
$valid_file_extensions =  ['msi','php','jpg'] ;;
if (in_array($info["extension"],$valid_file_extensions)) {
  echo $uploaded_type;   
}
?>

DEMO: https://3v4l.org/QGrRr

...