如果你不知道如何用 RegExp 来做,为什么不写一个函数呢?
function esc(s) {
var out = '', i, escaped = 0, c;
for (i = 0; i < s.length; ++i) { // loop over string
c = s.charAt(i);
if (c === '\\') escaped = 1 - escaped; // get escaped state
else {
if (c === "'" || c === '"') { // if quote
if (escaped === 0) out += '\\'; // escape if not escaped
else escaped = 0; // else reset escaped state
} else if (escaped) out += '\\', escaped = 0; // else close escape
}
out += c;
// console.log(s, i, c, escaped, out);
}
return out;
}
现在
esc('foo"bar'); // foo"bar -> foo\"bar
esc('foo\\"bar'); // foo\"bar -> foo\"bar
esc('foo\\\\"bar'); // foo\\"bar -> foo\\\"bar
esc('foo\\\\\\"bar'); // foo\\\"bar -> foo\\\"bar
JavaScript确实提供了两个(标准)本机函数,可以实现净化结果(尽管与上述不同)。它们分别是, 反过来是和。根据您要对字符串执行的操作,这些函数可能更可取。encodeURI
encodeURIComponent
decodeURI
decodeURIComponent
我还要补充一点,如果您想清理字符串以保护您的服务器,请在服务器端进行清理,因为即使您有客户端清理,您也不能相信来自客户端机器的任何数据都是安全的.