IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

addslashes / stripslashes en javascript


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut addslashes / stripslashes en javascript
    Bonjour,

    Je me prend la tête depuis deux jours a essayer de faire une expression régulière (enfin 2) pour avoir l'équivalent d'un addslashes et stripslashes qui sont disponible en php.

    C'est à dite :
    1) ajouter des anti-slash devant toutes les quotes et doubles quotes d'une String

    2) retirer les anti-slash devant toutes les quotes et doubles quotes d'une String

    Quelqu'un aurait-il ca tout fait dans un coin ? je suis vraiment une bille en expression régulière, et j'ai rien trouvé de convaincant sur le web pour l'instant :-(

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut
    Ah oui... j'oubliais...

    Le truc qui me prend la tête en fait... c'est d'ajouter l'anti-slash devant un autre anti-slash...

    c'est à dire que si dans ma chaine j'ai déjà \" ... je voudrais avoir \\\" ... et c'est la que je patauge dans mon expression régulière...

  3. #3
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut
    À ta place, je ferait une boucle qui vérifie un par un les cartactères de ta chaîne et je passerait ce caractère dans un switch qui décide exactement l'action à entreprendre. De plus je le combinerait avec la petite fonction que j'ai fait pour ajouter des actactères au beau milieu d'une chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    //Ajoute un caractère dans la chaine
    // c : Caractère
    // s : Chaine
    // i : Indice
    function addCar(c, s, i) {
    	var chaine = "";
    	if(i>0) {
    		for(var j=0;j<i;j++) {
    			chaine += s.charAt(j);
    		}
    	}
    	chaine += c;
    	for(var j=i;j<s.length;j++) {
    		chaine += s.charAt(j);
    	}
    	return chaine;	
    }
     
    function addslashes(str) {
      for(var i=0;i<str.length;i++) {
        switch(str.charAt(i)) {
          case "\" : addCar("\\", str, --i);
          case "'" : addCar("\", str, --i);
        }
      }
    }
    Et pour supprimer environ la même chose mais avec cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Supprime un caractère dans la chaine
    function delCar(s, i) {
    	var chaine = "";
    	if(i>0) {
    		for(var j=0;j<i;j++) {
    			chaine += s.charAt(j);
    		}
    	}
    	for(var j=(i+1);j<s.length;j++) {
    		chaine += s.charAt(j);
    	}
    	return chaine;
    }
    C'est de la théorie, il reste à se pencher sur comment faire ce code pour qu'il gère les caractères " et \ correctement.

    J'espère que ça peut t'aider!

  4. #4
    Membre éclairé Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Par défaut
    pour gérer le \\ tu pourrais je pense mettre une sorte de flag qui se lève quand tu tombe sur un \ et tombe sinon ça te permettrait de savoir si la lettre précedente était un \ et donc de pas supprimer les deux

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut
    Je note tout ca... j'vais tester ca dans le journée, je vous dirais ce que ca donne...


    Merci

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Par défaut
    Utiliser les expressions régulière est à mon avis la meilleur méthode..

    pour remplacer " en \"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var = Var.replace(/\"/g,"\\\"");
    et pour remplacer ' en \'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var = Var.replace(/\'/g,"\\\'");

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 57
    Par défaut
    Bonjour, je remonte un peu le post

    transforme \' en '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donne = donne.replace(/\\\'/g,"'");
    par contre je n'arrive pas a transformer \" en "

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donne = donne.replace(/\\\"/g,'"');
    mais ca ne marche pas

  8. #8
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    Attention il y a une différence quand on exprime l'expression
    entre 2 / (expression régulière)
    et entre guillemet (String qu'on passe a un constructeur d'objet RegExp qui crée l'expression régulière). Car dans ce second cas il faut respecter la stx du String

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donne = donne.replace(/\\/g,'"');
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var e = "\\\\""
    var r = new RegExp(e, "g");
    donne = donne.replace(r,'"');
    pour remplacer un anti slash suivi d'un guillement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donne = donne.replace(/\\"/g,'"');
    ce qui donne avec le constructeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var e = "\\\\\""
    var r = new RegExp(e, "g");
    donne = donne.replace(r,'"');

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 57
    Par défaut
    merci pour cette explication

  10. #10
    Membre expérimenté Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Par défaut
    pour conclure je dirais que avec des expressions régulière il est trés simple de faire ce qui est demande;

    Pour ajouter des "\" devant les \, les " et les ' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          donne = donne.replace(/\\("|'|\\)/g, "$1");
    Pour supprimer les "\" devant les \, les " et les ' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          donne = donne.replace(/("|'|\\)/g, "\\$1");

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut Post anciens mais bien referencé donc j'apporte ma solution
    Une des possibilités peut aussi consister en l'extend de l'objet de base String pour lui ajouter des methodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String.prototype.addSlashes = function(str)
    {return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');};
     
    String.prototype.stripSlashes = function(str)
    {return (str+'').replace(/\\(.?)/g, function (s, n1){switch (n1){case '\\':return '\\';case '0':return '\u0000';case '':return '';default:return n1;}});};
    il suffit ensuite de faire: mavariable.addSlashes();

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 417
    Par défaut
    Sinon quand on cherche l'équivalent javascript d'une fonction php il y a ce site qui est très pratique http://phpjs.org/functions/addslashes:303

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par wako057
    Une des possibilités peut aussi consister en l'extend de l'objet de base String pour lui ajouter des methodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String.prototype.addSlashes = function(str)
    {return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');};
     
    String.prototype.stripSlashes = function(str)
    {return (str+'').replace(/\\(.?)/g, function (s, n1){switch (n1){case '\\':return '\\';case '0':return '\u0000';case '':return '';default:return n1;}});};
    il suffit ensuite de faire: mavariable.addSlashes();
    Non, pas tout à fait...
    Dans ta notation, l'objet modifié est celui passé en paramètre de la méthode, pas celui qui l'appelle.
    Ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String.prototype.addSlashes = function(str)
    {return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');};
     
    String.prototype.stripSlashes = function(str)
    {return this.replace(/\\(.?)/g, function (s, n1){switch (n1){case '\\':return '\\';case '0':return '\u0000';case '':return '';default:return n1;}});};
    pour pouvoir l'appeler avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable.addSlashes();
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut
    bien vu on arrive donc a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String.prototype.addSlashes = function()
    {return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');};
     
    String.prototype.stripSlashes = function()
    {return this.replace(/\\(.?)/g, function (s, n1){switch (n1){case '\\':return '\\';case '0':return '\u0000';case '':return '';default:return n1;}});};
    appel via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mavariableString.stripSlashes();
    mavariableString.addSlashes();

Discussions similaires

  1. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  2. [MySQL] addslashes() stripslashes() et "" ''
    Par cotede2 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 01/05/2007, 00h18
  3. Réponses: 7
    Dernier message: 24/09/2005, 13h30
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo