在 Javascript 中,当我在某些变量中添加反斜杠时,例如:
var ttt = "aa ///\\\";
var ttt = "aa ///\";
Javascript 显示错误。
如果我尝试限制用户输入此字符,我也会收到错误消息:
(("aaa ///\\\").indexOf('"') != -1)
限制用户输入的反斜杠不是一个好策略,因为您必须向用户显示令人讨厌的消息。
为什么我收到反斜杠错误?
在 Javascript 中,当我在某些变量中添加反斜杠时,例如:
var ttt = "aa ///\\\";
var ttt = "aa ///\";
Javascript 显示错误。
如果我尝试限制用户输入此字符,我也会收到错误消息:
(("aaa ///\\\").indexOf('"') != -1)
限制用户输入的反斜杠不是一个好策略,因为您必须向用户显示令人讨厌的消息。
为什么我收到反斜杠错误?
反斜杠 ( \
) 是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 中也可以将输出用作字符串构造函数(考虑到您使用的是用户输入,这本身就是一个坏主意)。但无论如何,它应该可以完成您想要的工作。
你必须逃避每个\
人\\
:
var ttt = "aa ///\\\\\\";
更新:我认为这个问题根本与字符串中的转义字符无关。提问者似乎没有正确解释问题。
因为您必须向用户显示一条消息,该用户不能提供具有 (\) 字符的名称。
我认为场景是这样的:
var user_input_name = document.getElementById('the_name').value;
然后询问者想要检查是否user_input_name
包含任何 [ \
]。如果是,则提醒用户。
如果用户aa ///\
在 HTML 输入框中输入 [ ],那么如果您alert(user_input_name)
,您将看到 [ aaa ///\
]。您不需要转义,即在 JavaScript 代码中将\
[ \\
]替换为 [ ]。当您进行转义时,那是因为您试图在JavaScript 源代码中创建包含特殊字符的字符串。如果你不这样做,它就不会被正确解析。由于您已经获得了一个字符串,因此您无需将其传递给转义函数。如果你这样做,我猜你是从一个 JavaScript 代码生成另一个 JavaScript 代码,但这里不是这种情况。
我猜提问者想模拟输入,所以我们可以理解这个问题。不幸的是,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?
现在,你只需要做的是
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();
}
编辑:我曾经[]
引用要显示的文本,所以它不会比使用""
.
反斜杠\
保留用作 Javascript 中的转义字符。
要从字面上使用反斜杠,您需要使用两个反斜杠
\\
如果要在 javascript 变量值中使用特殊字符,则需要转义字符( \
)。
您示例中的反斜杠也是特殊字符。
所以你应该做这样的事情,
var ttt = "aa ///\\\\\\"; // --> ///\\\
或者
var ttt = "aa ///\\"; // --> ///\
但用户输入不需要转义字符。
当您/
在提示框或输入字段中按下然后提交时,这意味着 single /
。