【问题标题】:addslashes JavaScript equivalent添加斜杠 JavaScript 等价物
【发布时间】:2011-11-01 23:48:37
【问题描述】:

我正在寻找与 PHP 的 addSlashes 等效的 JavaScript 的正确版本。

我找到了很多版本,但没有一个版本处理 \b\t\n\f\r

http://jsfiddle.net/3tEcJ/1/

为了完整起见,这个 jsFiddle 应该提醒:\b\t\n\f\r"\\

【问题讨论】:

    标签: javascript regex escaping addslashes


    【解决方案1】:

    您需要使用反斜杠 \ 转义特殊字符。简单而简短 -

    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) --> _

    【讨论】:

      【解决方案2】:

      更短且令人惊讶的more efficient

       function as(str) {
          var a = {};
          a[str] = 1;
          return JSON.stringify(a).slice(1,-3);
        }
      

      slice(2, -4) 如果您不需要在字符串周围加上引号)

      【讨论】:

        【解决方案3】:

        或者这个来自phpjs.org

        function addslashes(str){
            return  (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
        }
        

        【讨论】:

          【解决方案4】:
          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

          【讨论】:

          • FWIW replace(/\b/g, '\\b') 在我对 jsfiddle 的测试中不起作用。
          • 我刚刚注意到这一点,并编辑了我的答案以使用\u0008,这很有效。似乎 JavaScript 的正则表达式语法无法识别 \b 的不一致。
          • 没问题;我很乐意提供帮助!
          • \b 是正则表达式中的边界条件,需要额外转义:\\b 应该可以工作。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-29
          • 2012-01-12
          • 2015-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-30
          相关资源
          最近更新 更多