web-dev-qa-db-fra.com

Échappement de la barre oblique inversée dans la chaîne - javascript

Je dois afficher le nom du fichier actuellement sélectionné (dans l'élément <input type="file">). 

Tout va bien, le seul problème est que je reçois ce genre de chaîne "C:\fakepath \. Typog_rules.pdf" (le navigateur le met automatiquement comme valeur pour l'élément d'entrée).

Lorsque j'essaie de scinder la chaîne par '\' ou '\\', elle échoue à cause de barres obliques non échappées. Les tentatives de correspondance/remplacement des barres obliques échouent également. Y a-t-il un moyen de contourner ceci? J'ai besoin que cela fonctionne au moins dans Opera et IE (car dans d'autres navigateurs, je peux utiliser FileReader)

PAR EXEMPLE. Je reçois "C:\fakepath\typog_rules.pdf" en tant qu'entrée et je souhaite obtenir "typog_rules.pdf" en sortie.

20
Max

Pour des raisons de sécurité, il n'est pas possible d'obtenir le chemin d'accès complet et réel d'un fichier, référencé via un élément <input type="file" />.

Cette question mentionne déjà et des liens vers d’autres questions relatives au débordement de pile concernant ce sujet.


Réponse précédente, conservée comme référence pour les futurs visiteurs qui accèdent à cette page par le titre, les balises et la question.
La barre oblique inverse doit être évitée.

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

En JavaScript, la barre oblique inverse est utilisée pour échapper aux caractères spéciaux, tels que les nouvelles lignes (\n). Si vous souhaitez utiliser une barre oblique inverse littérale, vous devez utiliser une double barre oblique inversée.

Donc, si vous voulez faire correspondre deux barres obliques inverses, vous devez utiliser quatre barres obliques inverses. Par exemple, alert("\\\\") affiche une boîte de dialogue contenant deux barres obliques inverses.

23
Rob W

Je pense que cela correspond plus à la réponse que vous recherchez:

<input type="file">

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

Échapper le caractère barre oblique inverse.

foo.split('\\')
3
Quentin

Légèrement hacky, mais ça marche:

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

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

0
Ashley Williams

Ajoutez un identifiant d’entrée à l’élément et faites quelque chose comme ça:

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