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

在Javascript中,当我把一个反斜杠放在一些variables中,如:

var ttt = "aa ///\\\"; var ttt = "aa ///\"; 

Javscript显示错误。

如果我试图限制用户input这个字符,我也会得到一个错误:

 (("aaa ///\\\").indexOf('"') != -1) 

限制用户input的反斜杠并不是一个好策略,因为你必须向用户显示一个烦人的信息。

为什么我的反斜杠出现错误?

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

为了输出文字反斜杠,你需要转义 。 这意味着\\将输出一个反斜杠(和\\\\将输出两个,依此类推)。 "aa ///\"不起作用的原因是因为反斜杠转义了" (它将打印一个文字引号),因此你的string没有被正确地终止。同样, "aa ///\\\"赢了工作,因为最后一个反斜杠再次逃脱了报价。

只要记住,要输出每个反斜杠,你需要给Javascript 两个

您可能想要尝试以下方法,这或多或less是逃避用户input的标准方法:

 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); } } 

这将用反斜杠replace所有反斜杠,然后继续将其他不可打印字符转义为其转义forms。 它也会转义单引号和双引号,所以即使在eval中,也可以使用输出作为string构造函数(考虑到您正在使用用户input,这本身就是个坏主意)。 但无论如何,它应该做你想要的工作。

你必须逃避每一个\\

 var ttt = "aa ///\\\\\\"; 

更新 :我认为这个问题不是关于string中的转义字符。 提问者似乎没有正确解释问题。

因为你必须向用户显示一个消息,那么用户不能给出具有(\)字符的名称。

我认为情况是这样的:

 var user_input_name = document.getElementById('the_name').value; 

然后提问者想要检查user_input_name包含任何[ \ ]。 如果是,则提醒用户。

如果用户在HTMLinput框中input[ aa ///\ ],那么如果alert(user_input_name) ,您将看到[ aaa ///\ ]。 您不需要转义,即在JavaScript代码中将[ \ ]replace为[ \\ ]。 当你转义的时候,那是因为你正在试图制作一个 JavaScript源代码中包含特殊字符的string。 如果你不这样做,它不会被正确parsing。 既然你已经得到了一个string,你不需要把它传递给一个转义函数。 如果你这样做,我猜你正在从JavaScript代码生成另一个JavaScript代码,但在这里并不是这样。

我猜测提问者想模拟input,所以我们可以理解这个问题。 不幸的是,提问者不太了解JavaScript。 因此,提供给我们的语法错误代码:

 var ttt = "aa ///\"; 

因此,我们假设提问者有逃跑的问题。

如果你想模拟,你的代码必须在第一时间有效。

 var ttt = "aa ///\\"; // <- This is correct // var ttt = "aa ///\"; // <- This is not. alert(ttt); // You will see [aa ///\] in dialog, which is what you expect, right? 

现在,你只需要做的就是

 var user_input_name = document.getElementById('the_name').value; if (user_input_name.indexOf("\\") >= 0) { // There is a [\] in the string alert("\\ is not allowed to be used!"); // User reads [\ is not allowed to be used] do_something_else(); } 

编辑 :我用[]引用文字显示,所以它会比使用""更less混淆。

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

要从字面上使用反斜杠,你需要使用两个反斜杠

 \\ 

jsfiddle链接到我试过你的查询http://jsfiddle.net/A8Dnv/1/它的工作正常@Imrul提到你在服务器端使用C#,你不介意或者:; http : //msdn.microsoft .COM / EN-US /库/ system.text.regularexpressions.regex.escape.aspx

如果要在javascriptvariables值中使用特殊字符,则需要使用Escape Character\ )。

你的例子中的反斜杠也是特殊字符。

所以你应该这样做,

 var ttt = "aa ///\\\\\\"; // --> ///\\\ 

要么

 var ttt = "aa ///\\"; // --> ///\ 

但是逃生angular色不需要用户input。

当你按/在提示框或input字段然后提交,这意味着单/