Regex para encontrar un nombre de archivo válido
-
06-07-2019 - |
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 ()?
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;)