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

StackOverflow https://stackoverflow.com/questions/1032104

Вопрос

Я хочу проверить, является ли строка именем файла (имя 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;)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top