javascript url-безопасная строка, безопасная для имени файла - PullRequest
44 голосов
/ 13 декабря 2011

Ищите функцию регулярного выражения / замены, чтобы взять введенную пользователем строку, скажем, «Классная страница Джона Смита», и вернуть безопасную строку имени файла / URL, например «john_smith_s_cool_page.html», или что-то в этом роде.

Ответы [ 4 ]

110 голосов
/ 13 декабря 2011

Ну, вот тот, который заменяет все, что не является буквой или цифрой, и делает все это строчными, как ваш пример.

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

Объяснение:

Регулярное выражение:/[^a-z0-9]/gi.Ну, на самом деле gi в конце - это просто набор опций, которые используются при использовании выражения.

  • i означает «игнорировать различия в верхнем / нижнем регистре»
  • g означает «глобальный», что на самом деле означает, что каждый матч должен быть заменен, а не только первый.

Итак, то, что мы видим, на самом деле просто [^a-z0-9].Давайте прочтем это шаг за шагом:

  • [ и ] определяют «класс символов», который представляет собой список из одного символа.Если вы напишите [one], то это будет соответствовать 'o', 'n' или 'e'.
  • Однако в начале списка символов есть ^.Это означает, что он должен соответствовать только символам , а не в списке.
  • Наконец, список символов a-z0-9.Прочитайте это как "от a до z и от 0 до 9".Это короткий способ написать abcdefghijklmnopqrstuvwxyz0123456789.

В общем, регулярное выражение гласит: «Найдите каждую букву, которая не находится между« a »и« z »или между« 0 »и «9».

15 голосов
/ 15 апреля 2015

Я знаю, что в оригинальном плакате было запрошено простое регулярное выражение, однако здесь больше внимания уделяется санации имен файлов, включая длину имени файла, зарезервированные имена файлов и, конечно же, зарезервированные символы.

Посмотрите на код в node-sanitize-filename для более надежного решения.

1 голос
/ 11 октября 2018

Для более гибкой и надежной обработки символов Юникода и т. Д. Вы можете использовать slugify в сочетании с некоторым регулярным выражением для удаления небезопасных символов URL

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

Это приводит к созданию хороших файловых кебаб-файлов в вашем URL и позволяет использовать больше символов за пределами диапазона a-z0-9.

1 голос
/ 13 декабря 2011

Я думаю, что ваше требование - заменить пробелы и афостофии на _ и добавить .html в конце, попытаться найти такое регулярное выражение.

см.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...