【发布时间】:2011-11-01 23:48:37
【问题描述】:
我正在寻找与 PHP 的 addSlashes 等效的 JavaScript 的正确版本。
我找到了很多版本,但没有一个版本处理 \b、\t、\n、\f 或 \r。
为了完整起见,这个 jsFiddle 应该提醒:\b\t\n\f\r"\\
【问题讨论】:
标签: javascript regex escaping addslashes
我正在寻找与 PHP 的 addSlashes 等效的 JavaScript 的正确版本。
我找到了很多版本,但没有一个版本处理 \b、\t、\n、\f 或 \r。
为了完整起见,这个 jsFiddle 应该提醒:\b\t\n\f\r"\\
【问题讨论】:
标签: javascript regex escaping addslashes
您需要使用反斜杠 \ 转义特殊字符。简单而简短 -
let escapeString = unescapeString.replace(/([<>*()?])/g, "\\$1")
它也会转义包括这些在内的特殊字符。
NULL (0x00) --> \0 [这是一个零,不是字母O]
BS (0x08) --> \b
TAB (0x09) --> \t
LF (0x0a) --> \n
CR (0x0d) --> \r
SUB (0x1a) --> \Z
" (0x22) --> \"
% (0x25) --> \%
' (0x27) --> \'
\ (0x5c) --> \
_ (0x5f) --> _
【讨论】:
更短且令人惊讶的more efficient:
function as(str) {
var a = {};
a[str] = 1;
return JSON.stringify(a).slice(1,-3);
}
(slice(2, -4) 如果您不需要在字符串周围加上引号)
【讨论】:
或者这个来自phpjs.org
function addslashes(str){
return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}
【讨论】:
function addslashes(string) {
return string.replace(/\\/g, '\\\\').
replace(/\u0008/g, '\\b').
replace(/\t/g, '\\t').
replace(/\n/g, '\\n').
replace(/\f/g, '\\f').
replace(/\r/g, '\\r').
replace(/'/g, '\\\'').
replace(/"/g, '\\"');
}
请注意我如何使用\u0008 将\b 替换为\\b。 JavaScript 的正则表达式语法似乎不接受\b,但它接受\u0008。 JavaScript 的字符串文字语法可以识别\b 和\u0008。
【讨论】:
replace(/\b/g, '\\b') 在我对 jsfiddle 的测试中不起作用。
\u0008,这很有效。似乎 JavaScript 的正则表达式语法无法识别 \b 的不一致。
\b 是正则表达式中的边界条件,需要额外转义:\\b 应该可以工作。