wake-up-neo.com

Backslash in Zeichenfolge fluchtend - Javascript

Ich muss den Namen der aktuell ausgewählten Datei anzeigen (in <input type="file">-Element). 

Alles ist in Ordnung, das einzige Problem ist, dass ich diese Art von Zeichenfolge "C:\fakepath \Typog_rules.pdf" bekomme (browset setzt dies automatisch als Wert für das Eingabeelement).

Wenn ich versuche, die Zeichenfolge nach '\' oder '\\' zu teilen, schlägt dies aufgrund von nicht umschriebenen Schrägstrichen fehl. Versuche, Slashes abzugleichen/zu ersetzen, schlagen ebenfalls fehl. Gibt es da einen Weg? Ich brauche dies, um zumindest in Opera und IE zu arbeiten (weil ich in anderen Browsern FileReader verwenden kann)

Z.B. Ich bekomme "C:\fakepath\typog_rules.pdf" als Eingabe und möchte "typog_rules.pdf" als Ausgabe erhalten.

20
Max

Aus Sicherheitsgründen ist es nicht möglich, den tatsächlichen vollständigen Pfad einer Datei abzurufen, die über ein <input type="file" />-Element referenziert wird.

Diese Frage erwähnt bereits und enthält Links zu anderen Stack Overflow-Fragen zu diesem Thema.


Vorherige Antwort, wird als Referenz für zukünftige Besucher aufbewahrt, die diese Seite über Titel, Tags und Fragen erreichen.
.__ Der Backslash muss geschützt werden.

string = string.split("\\");

In JavaScript wird der umgekehrte Schrägstrich verwendet, um Sonderzeichen, z. B. Zeilenumbrüche (\n), zu schützen. Wenn Sie einen literalen Backslash verwenden möchten, muss ein doppelter Backslash verwendet werden.

Wenn Sie also zwei Backslashes abgleichen möchten, müssen vier Backslashes verwendet werden. Zum Beispiel zeigt alert("\\\\") ein Dialogfeld mit zwei umgekehrten Schrägstrichen.

23
Rob W

Ich denke, das ist näher an der Antwort, die Sie suchen:

<input type="file">

$file = $(file);
var filename = fileElement[0].files[0].name;
4
Himerzi

Entkomme dem Backslash-Zeichen.

foo.split('\\')
3
Quentin

Etwas gehackt, aber es funktioniert:

const input = '\text';
const output = JSON.stringify(input).replace(/((^")|("$))/g, "").trim();

console.log({ input, output });
// { input: '\text', output: '\\text' }

0
Ashley Williams

Fügen Sie dem Element eine Eingabe-ID hinzu und führen Sie Folgendes aus:

document.getElementById('inputId').value.split(/[\\$]/).pop()
0
Yifat Biezuner