次のような文字列変数(_var str
_)があるとします
おい、彼は「You Rock!」と完全に言った
今、私はそれが次のように見えるようにする場合
おい、彼は完全に\ "You Rock!\"と言った
JavaScript replace()
関数を使用してこれを達成するにはどうすればよいですか?
str.replace("\"","\\"");
はうまく機能していません。 _unterminated string literal
_エラーが発生します。
さて、上記の文をSQLデータベースに保存する場合、MySQLで[〜#〜] longtext [〜#〜](またはその他の[〜#〜 ] varchar [〜#〜]-ish)データ型、実行する必要のある他の文字列最適化は何ですか?引用符とカンマは、クエリ文字列にはあまり適していません。その点についてもいくつかの提案をいただければ幸いです。
これにはグローバル正規表現を使用する必要があります。この方法で試してください
str.replace(/"/g, '\\"');
置換機能の正規表現の構文とオプションはこちらをご覧ください。
これを試して:
_str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes)
_
または、一重引用符を使用して検索を引用し、文字列を置換します。
_str.replace('"','\\"'); // (still need to escape the backslash)
_
更新:helmusが指摘したように、.replace()
に渡される最初のパラメーターが文字列の場合、最初に出現したもののみを置き換えます。グローバルに置き換えるには、g
(グローバル)フラグを使用して正規表現を渡す必要があります。
_str.replace(/"/g,"\\\"");
// or
str.replace(/"/g,'\\"');
_
しかし、なぜあなたはJavaScriptでこれをしているのですか?次のような文字列リテラルがある場合、これらのエスケープ文字を使用しても問題ありません。
_var str = "Dude, he totally said that \"You Rock!\"";
_
しかし、これは必要ですのみ文字列リテラルで。つまり、ユーザーがフォームフィールドに入力した値にJS変数が設定されている場合、このエスケープは必要ありません。
このような文字列をSQLデータベースに保存することに関する質問については、SQLステートメントに文字列リテラルを埋め込む場合にのみ文字をエスケープする必要があります-そして、SQLに適用されるエスケープ文字は(通常) JSと同じです。サーバー側でSQL関連のエスケープを行います。
他の答えはほとんどの文字列で機能しますが、すでにエスケープされている二重引用符のエスケープを解除できます。
正しく動作するには、すべてのバックスラッシュをエスケープしてから、次のようにすべての二重引用符をエスケープする必要があります。
var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');
文字列の使用方法や、関係する他のエスケープ文字によっては、これにはまだいくつかの問題があるかもしれませんが、ほとんどの場合はおそらく機能すると思います。
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);