44

次のような文字列変数 ( var str)があるとします。

おい、彼は完全に「あなたはロックだ!」と言いました。

今、私がそれを次のように見せるとしたら -

おい、彼は完全に「あなたはロックだ!」と言いました。

replace()JavaScript関数を使用してこれを行うにはどうすればよいですか?

str.replace("\"","\\"");うまく機能していません。エラーが発生しunterminated string literalます。

上記の文を SQL データベースに格納する場合、たとえば MySQL でLONGTEXT (またはその他のVARCHARっぽい) データ型として格納する場合、他にどのような文字列最適化を実行する必要がありますか?

引用符とカンマは、クエリ文字列にはあまり適していません。その点についてもいくつかの提案をいただければ幸いです。

4

4 に答える 4

75

これにはグローバル正規表現を使用する必要があります。このようにしてみてください:

str.replace(/"/g, '\\"');

Using Regular Expressions with JavaScriptの replace 関数の正規表現構文とオプションを確認してください。

于 2012-07-17T06:02:12.437 に答える
8

これを試して:

str.replace("\"", "\\\""); // (Escape backslashes and embedded double-quotes)

または、一重引用符を使用して検索を引用し、文字列を置き換えます。

str.replace('"', '\\"');   // (Still need to escape the backslash)

ヘルムスが指摘したように、渡された最初のパラメーターが.replace()文字列の場合、最初に出現したもののみが置き換えられます。グローバルに置き換えるには、g(global) フラグを指定して正規表現を渡す必要があります。

str.replace(/"/g, "\\\"");
// or
str.replace(/"/g, '\\"');

しかし、なぜ JavaScript でこれを行うのでしょうか? 次のような文字列リテラルがある場合は、これらのエスケープ文字を使用しても問題ありません。

var str = "Dude, he totally said that \"You Rock!\"";

ただし、これは文字列リテラルでのみ必要です。つまり、JavaScript 変数が、ユーザーがフォーム フィールドに入力した値に設定されている場合、このエスケープは必要ありません。

このような文字列を SQL データベースに格納することについての質問については、SQL ステートメントに文字列リテラルを埋め込む場合にのみ、文字をエスケープする必要があります。また、SQL で適用されるエスケープ文字は (通常) ではないことに注意してください。 JavaScript と同じです。サーバー側でSQL関連のエスケープを行います。

于 2012-07-17T06:01:22.793 に答える
0
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);
于 2012-07-17T06:05:11.720 に答える