web-dev-qa-db-fra.com

javascript url-safe nom-fichier sécurisé

Vous recherchez une fonction regex/replace pour prendre une chaîne entrée par l'utilisateur, par exemple "Page cool de John Smith", et pour renvoyer une chaîne sûre pour le nom du fichier/url telle que "john_smith_s_cool_page.html", ou quelque chose de ce genre.

40
ndmweb

En voici un qui remplace tout ce qui n’est pas une lettre ou un chiffre et le rend tout en minuscule, comme dans votre exemple.

var s = "John Smith's Cool Page";
var filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();

Explication:

L'expression régulière est /[^a-z0-9]/gi. En fait, la variable gi à la fin est simplement un ensemble d’options utilisées lorsque l’expression est utilisée.

  • i signifie "ignorer les différences majuscules/minuscules"
  • g signifie "global", ce qui signifie vraiment que chaque match doit être remplacé, pas seulement le premier.

Donc, ce que nous cherchons en tant que tel est vraiment juste [^a-z0-9]. Lisons-le pas à pas:

  • Les [ et ] définissent une "classe de caractères", qui est une liste de caractères uniques. Si vous écrivez [one], alors cela correspondrait à 'o' ou à 'n' ou à 'e'.
  • Cependant, il y a un ^ au début de la liste de caractères. Cela signifie que seuls les caractères pas de la liste doivent correspondre.
  • Enfin, la liste de caractères est a-z0-9. Lisez ceci comme "a à z et 0 à 9". C'est une façon d'écrire abcdefghijklmnopqrstuvwxyz0123456789.

Donc, en gros, l’expression régulière dit: "Trouve chaque lettre qui n’est pas comprise entre 'a' et 'z' ou entre 0 et 9 '".

106
Shalom Craimer

Je sais que l'affiche originale demandait une expression régulière simple, cependant, la désinfection des noms de fichiers, notamment la longueur du nom de fichier, les noms de fichiers réservés et, bien sûr, les caractères réservés, est plus importante.

Examinez le code dans node-sanitize-filename pour une solution plus robuste.

13
speedplane

Je pense que votre exigence est de remplacer les espaces et l’apophostophie `s par _ et d’ajouter le .html à la fin de la recherche de cette expression régulière.

référer 

http://www.regular-expressions.info/javascriptexample.html

1
Hemant Metalia

Pour une gestion plus souple et plus robuste des caractères unicode, etc., vous pouvez utiliser slugify avec certaines expressions rationnelles pour supprimer les caractères unsafe URL

const urlSafeFilename = slugify(filename, { remove: /"<>#%\{\}\|\\\^~\[\]`;\?:@=&/g });

Cela produit de beaux fichiers de casse pour les kebabs dans votre URL et autorise davantage de caractères en dehors de la plage a-z0-9.

0
Adam D