Регулярное выражение для поиска правильного имени файла
-
06-07-2019 - |
Вопрос
Я хочу проверить, является ли строка именем файла (имя DOT ext) или нет.
Имя файла не может содержать /? *:; {} \
Не могли бы вы предложить мне выражение регулярного выражения для использования в preg_match ()?
Решение
Вот, пожалуйста.
"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
" Один или несколько символов, которые не являются ни одним из этих символов, затем точка, а затем еще несколько символов, которые не являются этими. "
(Если вы уверены, что точка действительно необходима, если нет, то просто: " [^ /? * :; {} \\] + "
р>
Другие советы
$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');
^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.
Регулярное выражение будет примерно таким (для трехбуквенного расширения):
^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$
PHP требуется экранирование обратной косой черты, а preg_match ()
- экранирование прямой косой черты, поэтому:
$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";
Чтобы соответствовать именам файлов, таким как " hosts "
или " .htaccess "
, используйте это слегка измененное выражение:
^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$
Ниже регулярного выражения, используемого для проверки имени файла Unix в программе Golang:
reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*<*>quot;)