Как проверить в имени файла только AZ 0-9 az - _ и пробел? - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу ограничить файл буквенно-цифровым только с разрешенным пробелом.

Я попытался:

if (!preg_match('/[^_A-Za-z0-9 -.]/', $file['name'])) { //do something }

if (preg_match("/[^_A-Za-z0-9 -.]/", $file['name']) !== true) { //do something }

if (preg_match("/[^_A-Za-z0-9 -.]/", $file['name']) !== false) { //do something }

if (preg_match("/^[_A-Za-z0-9 -.]/", $file['name']) !== false) { //do something }

if (preg_match("/^[_A-Za-z0-9 -.]/", $file['name']) !== true) { //do something }

if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) !== true) { //do somethin }

В первом примере:

test.jpg принято,

testä.jpg тоже принято, но не должно быть.

Во втором примере:

test.jpg не принято, но так и должно быть.

testä.jpg не принято.

Ответы [ 2 ]

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

Спасибо всем за быструю помощь. Это:

if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) == false) { //do error output }

работает отлично. Только - _ . a-z A-Z 0-9 в строке принимаются.

Да, я уверен. «Демо» не так. Демо должно быть так:

$file = ["name" => "test.jpg"];
if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) == false) {
  echo "No Match!";
} else {
echo "match!";
}

preg_match дает "FALSE", поэтому "No Match" должен быть ответом !!!

А кто дал "минус" моему ответу :-( сначала проверьте демо перед знаком "минус".

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

Вы можете использовать квантификатор для класса символов, затем буквально сопоставить точку и использовать класс символов снова, указав, какие символы вы позволите получить более конкретное соответствие для имени файла.

^[A-Za-z0-9_ -]+\.[a-zA-Z0-9_]+$

Запустите шаблон с якорем, чтобы утверждать начало строки ^ (Если вы используете его внутри класса символов в начале [^, вы отрицаете класс символов и утверждаете конец строки $

Если вы хотите узнать, есть ли совпадение для имени файла, содержащего символы, которого не должно быть, вы можете использовать:

^[\w.-]+$

Regex demo | Php demo

Например, используйте preg_match и отрицайте его, если хотите знать, что оно не соответствует.

Ваш код может выглядеть следующим образом:

if (!preg_match('/^[\w.-]+$/i', $filename)) {

Примечание возвращаемые значения preg_match:

preg_match () возвращает 1, если шаблон соответствует заданному предмету, 0, если нет,или FALSE, если произошла ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...