转义字符串中的反斜杠 - javascript

时间:2011-12-23 16:31:00

标签: javascript file input escaping backslash

我需要显示当前所选文件的名称(在<input type="file">元素中)。

一切都很好,唯一的问题是我得到这种字符串“C:\ fakepath \ typog_rules.pdf“(browset自动将其作为输入元素的值)。

当我尝试将字符串分割为'\''\\'时,由于未转义的斜杠,它会失败。尝试匹配/替换斜线也失败了。有没有解决的办法?我需要这个至少在Opera和IE中工作(因为在其他浏览器中我可以使用FileReader)

E.G。我将“C:\ fakepath \ typog_rules.pdf”作为输入,并希望将“typog_rules.pdf”作为输出。

5 个答案:

答案 0 :(得分:24)

出于安全原因,无法通过<input type="file" />元素获取文件的真实完整路径。

This question已经提及,并链接到有关此主题的其他Stack Overflow问题。


以前的回答,作为未来访问者的参考,通过标题,标签和问题到达此页面。 必须转义反斜杠。

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

在JavaScript中,反斜杠用于转义特殊字符,例如换行符(\n)。如果要使用文字反斜杠,则必须使用双反斜杠。

因此,如果要匹配两个反斜杠,则必须使用四个反斜杠。例如,alert("\\\\")将显示一个包含两个反斜杠的对话框。

答案 1 :(得分:4)

我认为这更接近你正在寻找的答案:

<input type="file">

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

答案 2 :(得分:3)

逃避反斜杠字符。

foo.split('\\')

答案 3 :(得分:0)

为元素添加输入id并执行类似的操作:

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

答案 4 :(得分:0)

有点hacky,但是可以用:

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

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