it-swarm.com.de

javascript url-safe Dateiname-sichere Zeichenfolge

Suchen Sie nach einer Regex-/Ersetzen-Funktion, um einen vom Benutzer eingegebenen String mit der Aufschrift "John Smith's Cool Page" und einem sicheren Dateinamen/URL wie "john_smith_s_cool_page.html" oder etwas in diesem Umfang zurückzugeben.

40
ndmweb

Nun, hier ist eines, das alles ersetzt, was kein Buchstabe oder eine Zahl ist, und macht alles klein, wie in Ihrem Beispiel.

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

Erläuterung:

Der reguläre Ausdruck lautet /[^a-z0-9]/gi. Tatsächlich ist gi am Ende nur eine Reihe von Optionen, die verwendet werden, wenn der Ausdruck verwendet wird.

  • i bedeutet "Unterschiede zwischen Groß- und Kleinschreibung ignorieren"
  • g bedeutet "global", was wirklich bedeutet, dass jedes Spiel ersetzt werden muss, nicht nur das erste.

Was wir suchen, ist also wirklich nur [^a-z0-9]. Lesen wir es Schritt für Schritt:

  • [ und ] definieren eine "Zeichenklasse", bei der es sich um eine Liste von Einzelzeichen handelt. Wenn Sie [one] schreiben, würde dies entweder 'o' oder 'n' oder 'e' entsprechen.
  • Am Anfang der Liste der Zeichen steht jedoch ein ^. Das heißt, es sollte nur Zeichen nicht in der Liste stehen.
  • Schließlich ist die Liste der Zeichen a-z0-9. Lesen Sie dies als "a bis z und 0 bis 9". Es ist eine kurze Art, abcdefghijklmnopqrstuvwxyz0123456789 zu schreiben.

Im Grunde sagt der reguläre Ausdruck: "Finde jeden Buchstaben, der nicht zwischen 'a' und 'z' oder zwischen '0' und '9' liegt.".

106
Shalom Craimer

Ich weiß, dass das Originalposter nach einem einfachen regulären Ausdruck gefragt hat, es gibt jedoch mehr Probleme bei der Bereinigung von Dateinamen, einschließlich der Dateinamenslänge, der reservierten Dateinamen und natürlich der reservierten Zeichen.

Sehen Sie sich den code in node-sanitize-filename an, um eine robustere Lösung zu erhalten.

13
speedplane

Ich denke, Ihre Anforderung besteht darin, Leerzeichen und Aphostophie mit _ zu ersetzen und die .html am Ende anzuhängen, um eine solche Regex zu finden.

verweisen 

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

1
Hemant Metalia

Für eine flexiblere und robustere Handhabung von Unicode-Zeichen usw. können Sie slugify zusammen mit einigen regulären Ausdrücken verwenden, um unsichere URL-Zeichen zu entfernen.

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

Dies erzeugt Nice-Kebab-Case-Dateisymbole in Ihrer URL und lässt mehr Zeichen außerhalb des a-z0-9-Bereichs zu.

0
Adam D