变量中的JavaScript反斜杠(\)导致错误

Imr*_*rul 38 javascript

在Javascript中,当我在一些变量中添加反斜杠时:

var ttt = "aa ///\\\";
var ttt = "aa ///\"; 
Run Code Online (Sandbox Code Playgroud)

Javscript显示错误.

如果我尝试限制用户输入此字符,我也会收到错误:

(("aaa ///\\\").indexOf('"') != -1)
Run Code Online (Sandbox Code Playgroud)

限制用户输入的反斜杠不是一个好策略,因为你必须向用户显示恼人的消息.

为什么我用反斜杠得到错误?

Dan*_*uis 86

反斜杠(\)是Javascript中的转义字符(以及许多其他类C语言).这意味着当Javascript遇到反斜杠时,它会尝试转义以下字符.例如,\n是换行符(而不是反斜杠后跟字母n).

为了输出一个反斜杠,你需要逃脱.这意味着\\将输出一个反斜杠(\\\\并将输出两个,依此类推).原因"aa ///\"不起作用是因为反斜杠转义"(将打印文字引号),因此你的字符串没有正确终止.同样,"aa ///\\\"也行不通,因为最后一个反斜杠再次逃脱了引用.

请记住,对于要输出的每个反斜杠,您需要提供两个 Javascript .

  • 很好的解释。我为此投了 1 票。但我没有接受这个,因为我没有得到答案。输入在用户手中,如果用户尝试输入这种序列,那么是否有可能克服这个问题。 (2认同)

Roy*_*ron 9

您可能想尝试以下操作,这或多或少是逃避用户输入的标准方法:

function stringEscape(s) {
    return s ? s.replace(/\\/g,'\\\\').replace(/\n/g,'\\n').replace(/\t/g,'\\t').replace(/\v/g,'\\v').replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/[\x00-\x1F\x80-\x9F]/g,hex) : s;
    function hex(c) { var v = '0'+c.charCodeAt(0).toString(16); return '\\x'+v.substr(v.length-2); }
}
Run Code Online (Sandbox Code Playgroud)

这将使用转义反斜杠替换所有反斜杠,然后将其他不可打印的字符转义为其转义形式.它还可以转义单引号和双引号,因此即使在eval中也可以将输出用作字符串构造函数(考虑到您正在使用用户输入,这本身就是一个坏主意).但无论如何,它应该完成你想要的工作.


Tal*_*lsi 5

反斜杠\保留用作 Javascript 中的转义字符。

要按字面意思使用反斜杠,您需要使用两个反斜杠

\\
Run Code Online (Sandbox Code Playgroud)