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

变量中的JavaScript反斜杠(\)导致错误,javascript,Javascript,在Javascript中,当我在一些变量中添加反斜杠时,例如: var ttt = "aa ///\\\"; var ttt = "aa ///\"; Javascript显示一个错误 如果我试图限制用户输入此字符,我还会得到一个错误: (("aaa ///\\\").indexOf('"') != -1) 限制用户输入的反斜杠不是一个好策略,因为您必须向用户显示一条恼人的消息 为什么反斜杠出现错误?您必须将每个\转义为\: var ttt = "aa ///\\\\\\"; 更新:我

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

var ttt = "aa ///\\\";
var ttt = "aa ///\"; 
Javascript显示一个错误

如果我试图限制用户输入此字符,我还会得到一个错误:

(("aaa ///\\\").indexOf('"') != -1)
限制用户输入的反斜杠不是一个好策略,因为您必须向用户显示一条恼人的消息


为什么反斜杠出现错误?

您必须将每个
\
转义为
\

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

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

因为您必须向用户显示一条消息,该用户不能给出包含(\)字符的名称

我认为情况是这样的:

var user_input_name = document.getElementById('the_name').value;
然后询问者要检查
user\u input\u name
是否包含任何[
\
]。如果是,则提醒用户

如果用户在HTML输入框中输入[
aa//\
],那么如果您
alert(user\u input\u name)
,您将看到[
aaa//\
]。您不需要转义,即将[
\
]替换为JavaScript代码中的[
\
]。当您进行转义时,这是因为您试图生成一个字符串,该字符串包含JavaScript源代码中的特殊字符。如果不这样做,它将无法正确解析。因为您已经获得了一个字符串,所以不需要将其传递到转义函数中。如果您这样做,我猜您正在从一个JavaScript代码生成另一个JavaScript代码,但这里的情况并非如此

我猜asker想模拟输入,这样我们就可以理解问题了。不幸的是,asker不太懂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?

编辑:我使用了
[]
来引用要显示的文本,因此它比使用

指向我尝试查询的地方的JSFIDLE链接更容易理解它的工作原理 @Imrul如前所述,您在服务器端使用C,您也不介意:

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

为了输出文字反斜杠,需要对其进行转义。这意味着
\\
将输出一个反斜杠(而
\\\\\
将输出两个,依此类推)。
“aa//\”
不起作用的原因是反斜杠转义了
(它将打印一个文字引号),因此字符串没有正确终止。类似地,
“aa///\\\”
也不起作用,因为最后一个反斜杠再次转义了引号


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

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

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中,您也可以将输出用作字符串构造函数(考虑到您使用的是用户输入,这本身是个坏主意)。但在任何情况下,它都应该完成您想要的任务。

如果您想在javascript变量值中使用特殊字符,则需要转义字符(
\

示例中的反斜杠也是特殊字符

所以你应该这样做

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

但转义字符不需要用户输入


当您在提示框或输入字段中按
/
然后提交时,这意味着单个
/

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

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

\\

scackoverflow从任何地方删除我的1个斜杠,即使在()中也有1个斜杠(\)。真正的斜杠序列是一个变量中的3个斜杠。输入字符串来自哪里?是来自浏览器本身(用户输入)还是来自后端(由PHP/Perl/Ruby/等插入)?我这样问是因为看起来您试图使用javascript来解决这个问题,这完全没有意义。来自用户直接在浏览器中键入的所有字符串都已转义,因此您不需要进行任何转义。唯一的问题是在后端检索到什么。是的,这是在浏览器中HTML输入字段的用户输入中而且操作不使用javascript。我在后端使用ASP.NET(C#)。ASP.NET中没有“addslashes”函数。如果这可以在服务器端解决,那么对我来说也没问题。@Imrul,长话短说,在客户端,您必须在
var ttt=“aa”中逐字阅读源代码///\\\\\\";。努力做到这一点。如果您使用C#,为什么给我们提供指向PHP的链接?你应该发布你的C代码。你不能用javascript解决这个问题(因为那时它已经是一个语法错误)。将您的问题重新标记为ASP.NET,并向我们展示如何在ASP中包含字符串。请查看此链接&它们做了相同的事情,但如果我使用var t=addslashes(“aa//\\\”),则我得到了错误!!您是否在服务器端用PHP编码?因为
var t
看起来不像是一个PHP变量声明。我正在使用javascript来解决这个问题。我尝试使用escape(string)和unescape(string)。但是这些都不起作用。然后,我的答案已经告诉您当您在JS代码中输入字符串时如何转义。
escape()
不是为了这个目的。我得到了你的答案。但这不是我想要的。如果您的输入是动态的,那么如何在字符串中添加额外的斜杠呢。你需要一个函数来做到这一点。我使用了我前面提到的一些函数,但我没有得到我想要的。@gumbo和y
var ttt = "aa ///\\"; // --> ///\
\\