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

时间:2010-10-11 04:17:54

标签: javascript

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

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

Javscript显示错误。

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

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

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

为什么我收到反斜杠的错误?

6 个答案:

答案 0 :(得分:75)

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

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

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

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:4)

您必须将每个\转义为\\

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

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

  

因为您必须向用户显示一条消息,即用户无法提供具有(\)字符的名称。

我认为情景如下:

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

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

如果用户在HTML输入框中输入[aa ///\],那么如果您alert(user_input_name),则会看到[aaa ///\]。您无需转义,即在JavaScript代码中将[\]替换为[\\]。当你进行转义时,那是因为你试图在 JavaScript源代码中创建一个包含特殊字符的字符串。如果不这样做,将无法正确解析。由于您已经获得了一个字符串,因此您无需将其传递给转义函数。如果你这样做,我猜你是从JavaScript代码生成另一个JavaScript代码,但在这里不是这样。

我猜测者想要模拟输入,所以我们可以理解这个问题。不幸的是,提问者并不了解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();
  }

修改:我使用[]来引用要显示的文字,因此与使用""相比,它不会那么混乱。

答案 3 :(得分:2)

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

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

\\

答案 4 :(得分:0)

jsfiddle链接到我尝试查询的地方http://jsfiddle.net/A8Dnv/1/它的工作正常 @Imrul如上所述,你在服务器端使用C#而你也不介意:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx

答案 5 :(得分:0)

如果您想在javascript变量值中使用特殊字符,则需要 Escape Character \)。

您示例中的

反斜杠也是特殊字符。

所以你应该这样做,

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

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

Escape Character 不需要用户输入。

当您在提示框或输入字段中按/然后提交时,表示单/