web-dev-qa-db-fra.com

Comment remplacer un guillemet double par un guillemet double d'échappement dans une chaîne en utilisant javascript?

Disons que j'ai une variable de chaîne (var str) Comme suit-

Mec, il a totalement dit que "You Rock!"

Maintenant, si je veux que ça ressemble à ceci:

Mec, il a totalement dit que\"You Rock! \"

Comment puis-je accomplir cela en utilisant la fonction JavaScript replace()?

str.replace("\"","\\""); ne fonctionne pas si bien. Il donne une erreur unterminated string literal.

Maintenant, si la phrase ci-dessus devait être stockée dans une base de données SQL, dites dans MySQL comme TEXTE LONG (ou tout autre VARCHAR - ish) type de données, quelles autres optimisations de chaîne dois-je effectuer? Les guillemets et les virgules ne sont pas très conviviaux avec les chaînes de requête. J'apprécierais également quelques suggestions à ce sujet.

33
Samik Sengupta

Vous devez utiliser une expression régulière globale pour cela, essayez de cette façon

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

consultez la syntaxe regex et les options de la fonction replace ici:

http://www.regular-expressions.info/javascript.html

56
Willem D'Haeseleer

Essaye ça:

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

Ou, utilisez des guillemets simples pour citer votre recherche et remplacer des chaînes:

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

MISE À JOUR: Comme l'a souligné helmus, si le premier paramètre passé à .replace() est une chaîne, il ne remplacera que la première occurrence. Pour remplacer globalement, vous devez passer une expression régulière avec l'indicateur g (global):

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

Mais pourquoi faites-vous cela en JavaScript? Vous pouvez utiliser ces caractères d'échappement si vous avez un littéral de chaîne comme:

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

Mais cela est nécessaire niquement dans un littéral de chaîne. Autrement dit, si votre variable JS est définie sur une valeur qu'un utilisateur a tapée dans un champ de formulaire, vous n'avez pas besoin de cet échappement.

Concernant votre question sur le stockage d'une telle chaîne dans une base de données SQL, encore une fois, vous n'avez besoin d'échapper les caractères que si vous incorporez un littéral de chaîne dans votre instruction SQL - et rappelez-vous que les caractères d'échappement qui s'appliquent dans SQL ne le sont pas (généralement) le même que pour JS. Vous feriez tout échappement côté serveur côté SQL.

6
nnnnnn

Les autres réponses fonctionneront pour la plupart des chaînes, mais vous pouvez finir par échapper à un guillemet double déjà échappé, ce qui n'est probablement pas ce que vous voulez.

Pour fonctionner correctement, vous devrez échapper à toutes les barres obliques inverses, puis échapper à toutes les guillemets doubles, comme ceci:

var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');

selon la façon dont vous devez utiliser la chaîne et les autres caractères d'échappement impliqués, cela peut encore poser quelques problèmes, mais je pense que cela fonctionnera probablement dans la plupart des cas.

3
derekmc
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);
0
F0G