Регулярное выражение для поиска действительного имени файла

Я хочу проверить, является ли строка именем файла (имя DOT ext) или нет.

Имя файла не может содержать / ? * : ; { } \

Не могли бы вы предложить мне выражение регулярного выражения для использования в preg_match()?

Ответы

Ответ 1

Здесь вы идете:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"

"Один или несколько символов, которые не являются ни одним из этих, а затем точкой, а затем еще несколько символов, которые не являются этими".

(Пока вы уверены, что точка действительно нужна - если нет, просто: "[^/?*:;{}\\]+"

Ответ 2

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

Ответ 3

Регулярное выражение будет чем-то вроде (для трехбуквенного расширения):

^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$

PHP нуждается в обратных косых чертах, а preg_match() нужны перекодированные слэши, поэтому:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";

Чтобы соответствовать именам файлов, например "hosts" или ".htaccess", используйте это слегка измененное выражение:

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$

Ответ 4

Ниже регулярного выражения, используемого для проверки имени файла Unix в программе Golang:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")