Regex para encontrar nome de arquivo válido
-
06-07-2019 - |
Pergunta
Quero verificar se uma string é um nome de arquivo (nome DOT ext) ou não.
Nome do arquivo não pode conter / ? * : ; { } \
Você poderia por favor me sugerir a expressão regex para uso em preg_match ()?
Solução
Aqui vai:
"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
"Um ou mais caracteres que não são qualquer um desses queridos, em seguida, um ponto, em seguida, alguns mais caracteres que não são estes queridos."
(Contanto que você tem certeza de que o ponto é realmente necessário - se não, é simplesmente: "[^/?*:;{}\\]+"
Outras dicas
$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');
^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.
O regex seria algo como (para uma extensão de três letras):
^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$
PHP precisa de barras invertidas escapou, e preg_match()
precisa de barras escapou, assim:
$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";
Para combinar com nomes como "hosts"
ou ".htaccess"
, use esta expressão ligeiramente modificado:
^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$
Abaixo do regex usando para verificação Unix nome de arquivo em um programa golang:
reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")