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 ()?

Foi útil?

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:]]+)*$")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top