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.
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.
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.
Je pense que cela correspond plus à la réponse que vous recherchez:
<input type="file">
$file = $(file);
var filename = fileElement[0].files[0].name;
Échapper le caractère barre oblique inverse.
foo.split('\\')
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' }
Ajoutez un identifiant d’entrée à l’élément et faites quelque chose comme ça:
document.getElementById('inputId').value.split(/[\\$]/).pop()