¿Cuál es la expresión regular (JavaScript) que debo usar para garantizar que una cadena sea un nombre de archivo válido?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Todavía estoy aprendiendo RegEx en este momento, pero por el momento ¿alguien podría ayudarme con esto? Tengo algunos requisitos especiales para formatear la cadena:

  1. No hay directorios. SOLO el nombre del archivo.
  2. El nombre del archivo debe estar en minúsculas.
  3. Los espacios en blanco deben reemplazarse con guiones bajos.

No debería ser difícil, pero estoy presionado por el tiempo y no estoy seguro de la forma 'correcta' de asegurar un nombre de archivo válido (es decir, olvido qué caracteres se suponían que no eran válidos para los nombres de archivo).

¿Fue útil?

Solución

Y una combinación simple de RegExp y otros javascript es lo que recomendaría:

var a = "c:\\some\\path\\to\\a\\file\\with Whitespace.TXT";
a = a.replace(/^.*[\\\/]([^\\\/]*)$/i,"$1");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);

Otros consejos

Si tiene prisa súper rápida, generalmente puede encontrar expresiones regulares aceptables en la biblioteca en http: // regexlib.com/ . Edite para decir: Aquí hay uno que podría funcionar para usted .

Si está tomando una ruta de cadena del usuario (por ejemplo, leyendo el valor de un campo de carga de archivos), no puede estar seguro de cuál es el carácter separador de ruta. Puede ser una barra diagonal inversa (Windows), barra diagonal (Linux, OS X, BSD, etc.) o algo completamente diferente en sistemas operativos antiguos u oscuros. Dividir la ruta en avance o barra invertida cubrirá los casos comunes, pero es una buena idea incluir la posibilidad de que el usuario anule el nombre de archivo en caso de que adivinemos mal.

En cuanto a los 'caracteres no válidos', estos también dependen del sistema operativo. Probablemente la ruta más fácil es reemplazar todos los caracteres no alfanuméricos con un marcador de posición como un guión bajo.

Esto es lo que uso:

var parts= path.split('\\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'

Verificaría la RegEx Library .

Puede elegir entre cualquier cantidad de expresiones regulares preconfiguradas de diversos grados de solidez para satisfacer sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top