Избегать обратной косой черты в строке - JavaScript - PullRequest
23 голосов
/ 23 декабря 2011

Мне нужно показать имя выбранного файла (в элементе <input type="file">).

Все хорошо, единственная проблема в том, что я получаю строку такого типа "C: \ fakepath \ typog_rules.pdf" (браузер автоматически помещает это значение в качестве элемента ввода).

Когда я пытаюсь разделить строку на '\' или '\\', она не работает из-за косой черты без экранирования.Попытки сопоставить / заменить косые черты тоже не удаются.Это можно обойти?Мне нужно, чтобы это работало по крайней мере в Opera и IE (потому что в других браузерах я могу использовать FileReader)

EG Я получаю «C: \ fakepath \ typog_rules.pdf» в качестве ввода и хочу получить «typog_rules».pdf "как вывод.

Ответы [ 5 ]

26 голосов
/ 23 декабря 2011

Из соображений безопасности невозможно получить реальный полный путь к файлу, указанный через элемент <input type="file" />.

Этот вопрос уже упоминается и ссылается на другие вопросы переполнения стека по этой теме.


Предыдущий ответ, сохраняемый как ссылка для будущих посетителей, которые попадают на эту страницу через заголовок, теги и вопрос.
Обратная косая черта должна быть экранирована.
string = string.split("\\");

В JavaScript обратная косая черта используется для экранирования специальных символов, таких как символы новой строки (\n). Если вы хотите использовать буквенную обратную косую черту, необходимо использовать двойную обратную косую черту.

Итак, если вы хотите сопоставить две обратные косые черты, необходимо использовать четыре обратные косые черты. Например, alert("\\\\") покажет диалоговое окно, содержащее две обратные косые черты.

4 голосов
/ 18 января 2013

Я думаю, что это ближе к ответу, который вы ищете:

<input type="file">

$file = $(file);
var filename = fileElement[0].files[0].name;
3 голосов
/ 23 декабря 2011

Выход из символа обратной косой черты.

foo.split('\\')
0 голосов
/ 02 июля 2018

Немного взломан, но работает:

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

console.log({ input, output });
// { input: '\text', output: '\\text' }
0 голосов
/ 22 июня 2016

Добавьте идентификатор входа к элементу и сделайте что-то подобное:

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