Estoy creando una aplicación basada en navegador que permite a los usuarios crear carpetas con algunos archivos .json (no es gran cosa). La cuestión es que al marco que estoy usando (NW.js) no parece importarle permitir que los usuarios creen carpetas llamadas "CON" o "NUL"; Se supone que no deben crearse, los archivos que contienen simplemente desaparecen y es algo difícil eliminar la carpeta por sí mismos.
No puedo hacer ningún problema para hacer algo como esto para evitar que suceda:
var newFolder = "nul"; function checkFolderName(text) { switch(newFolder) { case "con": console.log("folder can't be created") break; case "nul": console.log("folder can't be created") break; // and so on... there's about 23 windows-reserved names that I could find default: console.log("folder can be created") }} checkFolderName(newFolder);Pero me pregunto si hay alguna forma más fácil de verificar esto a través de Regex/Javascript, o tal vez algún enfoque diferente para esta idea.
Aquí hay una forma un poco más limpia de escribir lo que quieres.
Función renombrada para implicar que toma una cadena y devuelve un valor booleano.
Si la cadena de entrada no es válida, devuelve falso.
Todos los nombres prohibidos se agrupan en una lista que se actualiza fácilmente.
La validez se comprueba si la lista contiene el nombre.
function folderNameIsValid (name) { let valid = false; if (!name || typeof(name) !== 'string') { return valid; } const bannedNames = [ 'con', 'nul' ]; if (!bannedNames.includes(name.toLowerCase())) { valid = true; } return valid; } if (folderNameIsValid('NUL')) { console.log('folder can be created'); } else { console.log('folder cannot be created'); }Si quieres usar expresiones regulares, puedes hacerlo así:
if (/^con|nul|abc|xyz$/.test(newFolder)) console.log("folder can't be created"); el | carácter significa 'o'. por lo que la función de prueba devolverá verdadero si newFolder es "con" o "nul" o "abc" o "xyz"
Los signos ^ y $ son el principio y el final de la cadena.
Si quieres saber exactamente cuál fue la parte ilegal, puedes usar esto:
var matching = newFolder.match(/^con|nul|abc|xyz$/); if (matching) { console.log("folder can't be created, found " + matching[0]); }También puede usar esta notación de cambio de caso:
switch (newFolder) { case "con": case "nul": case "abc": case "xyz": console.log("folder can't be created"); break; default: console.log("folder can be created"); }Mi amigo podría ayudarme a hacer esto con expresiones regulares :
let valid = /^(con|prn|aux|nul|com|lpt)\d*$/gi.test(newFolder) console.log(valid) // true or falseSin embargo, comienza a ser bastante complicado si desea agregar más "nombres prohibidos" , por lo que la sugerencia de jaredcheeda es bastante útil en este caso.