Qual è l'espressione regolare (JavaScript) che dovrei usare per assicurarmi che una stringa abbia un nome file valido?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Al momento sto ancora imparando RegEx, ma per ora qualcuno potrebbe aiutarmi con questo? Ho alcuni requisiti speciali per la formattazione della stringa:

  1. Nessuna directory. SOLO il nome del file.
  2. Il nome del file deve essere tutto minuscolo.
  3. Gli spazi bianchi devono essere sostituiti con caratteri di sottolineatura.

Non dovrebbe essere difficile, ma ho poco tempo e non sono sicuro del modo "corretto" di garantire un nome file valido (vale a dire, ho dimenticato quali caratteri non dovrebbero essere validi per i nomi file).

È stato utile?

Soluzione

E una semplice combinazione di RegExp e altri javascript è ciò che consiglierei:

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);

Altri suggerimenti

Se sei di fretta, in genere puoi trovare espressioni regolari accettabili nella libreria a http: // regexlib.com/. Modifica per dire: Eccone uno che potrebbe funzionare per te .

Se stai prendendo un percorso stringa dall'utente (ad es. leggendo il valore .valore di un campo di caricamento file), non puoi davvero essere sicuro di quale sia il carattere separatore percorso. Potrebbe essere una barra rovesciata (Windows), una barra (Linux, OS X, BSD ecc.) O qualcos'altro interamente su sistemi operativi vecchi o oscuri. Dividere il percorso su forward o backslash coprirà i casi comuni, ma è una buona idea includere la possibilità per l'utente di sovrascrivere il nome del file nel caso in cui abbiamo indovinato.

Anche per i "caratteri non validi" dipendono dal sistema operativo. Probabilmente il percorso più semplice è sostituire tutti i non alfanumerici con un segnaposto come un carattere di sottolineatura.

Ecco cosa 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= '_'

Vorrei dare un'occhiata alla Biblioteca RegEx .

Puoi scegliere tra qualsiasi numero di espressioni regolari preconfigurate di vari gradi di robustezza per soddisfare le tue esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top