Pregunta

Quiero verificar si una cadena es un nombre de archivo (nombre DOT ext) o no.

El nombre del archivo no puede contener /? *:; {} \

¿Podría sugerirme la expresión regex para usar en preg_match ()?

¿Fue útil?

Solución

Aquí tienes:

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

" Uno o más caracteres que no son ninguno de estos, luego un punto, luego algunos caracteres más que no son estos. "

(Siempre y cuando esté seguro de que el punto es realmente necesario; de lo contrario, es simplemente: " [^ /? * :; {} \\] + "

Otros consejos

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

La expresión regular sería algo así (para una extensión de tres letras):

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

PHP necesita barras invertidas escapadas, y preg_match () necesita barras diagonales escapadas, así que:

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

Para hacer coincidir nombres de archivo como " hosts " o " .htaccess " , use esta expresión ligeramente modificada:

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

Debajo de la expresión regular que se usa para verificar el nombre de archivo de Unix en un programa Golang:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*<*>quot;)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top