Регулярное выражение для поиска правильного имени файла - PullRequest
15 голосов
/ 23 июня 2009

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

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

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

Ответы [ 4 ]

17 голосов
/ 23 июня 2009

Вот, пожалуйста:

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

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

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

6 голосов
/ 23 июня 2009
$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.
2 голосов
/ 23 июня 2009

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

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

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

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

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

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$
0 голосов
/ 07 июня 2017

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

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