Подтвердить что ты не робот

Удаление одиночных кавычек в строке JavaScript для оценки JavaScript

У меня есть проект, в котором оценивается некоторый JavaScript var. Поскольку строка должна быть экранирована (только одинарные кавычки), я написал тот же самый код в тестовой функции. У меня есть следующий бит довольно простого кода 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.

4b9b3361

Ответ 1

Дело в том, что .replace() не модифицирует сама строку, поэтому вы должны написать что-то вроде:

strInputString = strInputString.replace(...

Также кажется, что вы не выполняете правильное выполнение символа. Для меня работали следующие:

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

Ответ 2

Я согласен, что этот var formattedString = string.replace(/'/g, "\\'"); работает очень хорошо, но так как я использовал эту часть кода в PHP с каркасом Prado (вы можете зарегистрировать js script в классе PHP), мне нужен этот образец, работающий внутри двойных кавычек,

Решение, которое сработало для меня, состоит в том, что вам нужно поставить три \ и избежать двойных кавычек. "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Я отвечаю на этот вопрос, так как у меня возникли проблемы с поиском трех твиков \.

Ответ 3

Лучше всего использовать JSON.stringify(), чтобы покрыть все ваши базы, такие как обратная косая черта и другие специальные символы. Вот ваша оригинальная функция с ее заменой вместо strInputString:

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

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

(Таким образом, ваш strInputString может быть чем-то вроде \\\'\"'"''\\abc'\, и он все равно будет работать нормально.)

Обратите внимание, что он добавляет свои собственные двойные кавычки, поэтому вам больше не нужно включать одинарные кавычки.

Ответ 4

Только это сработало для меня:

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

Итак, переменная результата будет содержать "d\'av".

Я не знаю, почему с RegEx не работает, возможно, из-за JS Framework, который я использую (Backbone.js)

Ответ 5

strInputString = strInputString.replace(/'/g, "''");