43

我有一个项目,其中评估了一些 JavaScript 变量。因为字符串需要转义(仅限单引号),所以我在测试函数中编写了完全相同的代码。我有以下一些非常简单的 JavaScript 代码:

function testEscape() {
    var strResult = "";
    var strInputString = "fsdsd'4565sd";

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help!
    strInputString.replace(/'/g, "''");

    var strTest = "strResult = '" + strInputString + "';";
    eval(strTest);
    alert(strResult);
}

我想提醒它,说:fsdsd'4565sd

4

8 回答 8

105

问题是它.replace()不会修改字符串本身,因此您应该编写如下内容:

strInputString = strInputString.replace(...

似乎您没有正确进行字符转义。以下对我有用:

strInputString = strInputString.replace(/'/g, "\\'");
于 2013-02-26T11:20:52.947 回答
13

最好用于JSON.stringify()覆盖所有基础,例如反斜杠和其他特殊字符。这是您的原始功能,而不是修改strInputString

function testEscape() {
    var strResult = "";
    var strInputString = "fsdsd'4565sd";

    var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
    eval(strTest);
    alert(strResult);
}

(这样你strInputString可能会像这样\\\'\"'"''\\abc'\,它仍然可以正常工作。)

请注意,它添加了自己的双引号,因此您不再需要包含单引号。

于 2018-12-21T07:51:21.850 回答
1

我同意这var formattedString = string.replace(/'/g, "\\'");很好用,但是因为我在 PHP 中使用了这部分代码和框架 Prado(您可以在 PHP 类中注册 js 脚本),所以我需要在双引号中使用这个示例。

对我有用的解决方案是您需要输入三个\并转义双引号。 "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

我回答了这个问题,因为我很难找到三个\是解决方法。

于 2016-03-11T22:33:18.487 回答
0

只有这对我有用:

searchKeyword.replace(/'/g, "\\\'");//searchKeyword contains "d'av"

因此,结果变量将包含“d\'av”。

我不知道为什么 RegEx 不起作用,可能是因为我使用的 JS 框架(Backbone.js)

于 2019-07-03T14:50:04.130 回答
0

有两种方法可以在 JavaScript 中转义单引号。

1- 使用双引号或反引号将字符串括起来。

示例:“fsdsd'4565sd”或“fsdsd'4565sd”。

2- 在任何特殊字符前使用反斜杠,在我们的例子中是单引号

示例:strInputString = strInputString.replace(/ ' /g, " \\' ");

注意:使用双反斜杠。

两种方法都对我有用。

于 2020-09-14T09:04:33.977 回答
0

var str =“fsdsd'4565sd”; str.replace(/'/g,"'")

这对我有用。请试试这个

在此处输入图像描述

于 2020-11-12T11:13:48.727 回答
0

这对我有用。

string address=senderAddress.Replace("'", "\\'");
于 2020-11-18T09:56:09.637 回答
-2
strInputString = strInputString.replace(/'/g, "''");
于 2016-02-17T00:42:39.390 回答