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 régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    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 régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    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 actif 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
    Points : 254
    Points
    254
    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 habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    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 régulier
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Points : 76
    Points
    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
    Nouveau Candidat au Club
    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
    Points : 1
    Points
    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 du Club
    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
    Points : 40
    Points
    40
    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 actif Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Points : 255
    Points
    255
    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 du Club
    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
    Points : 40
    Points
    40
    Par défaut
    merci pour cette explication

  10. #10
    Membre actif Avatar de Cpas2latarte
    Inscrit en
    Janvier 2006
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 237
    Points : 255
    Points
    255
    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 à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Points : 21
    Points
    21
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    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
    Points : 91 220
    Points
    91 220
    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();

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Points : 21
    Points
    21
    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