Quelle est l'expression régulière (JavaScript) que je devrais utiliser pour m'assurer qu'une chaîne est un nom de fichier valide?

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

  •  02-07-2019
  •  | 
  •  

Question

J'apprends encore le RegEx en ce moment, mais pour le moment, quelqu'un pourrait-il m'aider avec cela? J'ai quelques exigences particulières pour formater la chaîne:

  1. Pas de répertoires. JUSTE le nom du fichier.
  2. Le nom du fichier doit être en minuscule.
  3. Les espaces blancs doivent être remplacés par des traits de soulignement.

Ça ne devrait pas être difficile, mais je suis pressé par le temps et je ne suis pas sûr de la manière "correcte" de garantir un nom de fichier valide (à savoir, j'oublie quels caractères étaient supposés ne pas être valides pour les noms de fichier).

Était-ce utile?

La solution

Et je recommanderais une combinaison simple de RegExp et d'autres scripts javascript:

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

Autres conseils

Si vous êtes très pressé, vous pouvez généralement trouver des expressions rationnelles acceptables dans la bibliothèque à l'adresse http: //. regexlib.com/ . Modifier pour dire: En voici un qui pourrait fonctionner pour vous .

Si vous prenez un chemin de chaîne de l'utilisateur (par exemple, en lisant le champ .value d'un fichier téléchargé), vous ne pouvez pas vraiment savoir quel est le caractère séparateur de chemin. Cela peut être une barre oblique inverse (Windows), une barre oblique (Linux, OS X, BSD, etc.) ou autre chose entièrement sur des systèmes d'exploitation anciens ou obscurs. La division du chemin en une barre oblique inversée ou ascendante couvre les cas courants, mais il est judicieux d’inclure la possibilité pour l’utilisateur de remplacer le nom de fichier au cas où nous aurions mal deviné.

En ce qui concerne les "caractères non valides", ceux-ci dépendent également du système d'exploitation. Le chemin le plus facile consiste probablement à remplacer tous les éléments non alphanumériques par un espace réservé tel qu'un trait de soulignement.

Voici ce que j'utilise:

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

Je voudrais consulter la bibliothèque RegEx .

Vous pouvez choisir parmi un nombre quelconque d'expressions régulières préconfigurées plus ou moins robustes, selon vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top