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 :

Conversion multiple et conversion de parentheses [RegExp]


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut Conversion multiple et conversion de parentheses
    Bonjour,

    Je cherche à faire un petit script simple qui va convertir dans une chaine les symboles & é " ' ( - è _ ç à de notre clavier français en valeurs numériques, à savoir 1 2 3 4 5 6 7 8 9 0.

    J'utilise donc les RegExp, mais 2 choses me posent problème :

    - d'abord, comment faire la conversion de l'ensemble des caractères en 1 seule fois ? en l'état, j'ai besoin de 10 lignes du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("&" ,"g"), '1');
    ce qui vous en conviendrez n'est pas élégant du tout.

    - Ensuite, j'ai un problème pour le 5 qui correspond au symbole "("... J'écrit donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("\(" ,"g"), '5');
    et malgré la protection via l'antislash, j'ai invariablement la même erreur : unterminated parenthetical.

    EDIT : J'ai trouvé la solution, il faut faire une double protection : un protection pour le symbole \ et une protection pour le symbole (, ce qui donnr la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("\\\(" ,"g"), '5');
    Pour le reste, j'ai pas encore de solution
    Enfin, il me semble que le symbole - devrait également être protégé... Pourtant, que j'écrive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("\-" ,"g"), '6');
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("-" ,"g"), '6');
    Le résultat est le même : ça marche... Dans un soucis de compréhension, quelqu'un aurait-il l'amabilité de m'expliquer pourquoi ?

    En vous remerciant par avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    par rapport à des substitutions multiples, en général j'utilise un objet que j'itère pour faire les substitutions :

    Ex. une fonction qui "nettoie" les accents :
    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
     
    function cleanAccent(str)
    {
    	var retour = str;
    	var exp = {"a":"[\340\341\342\343\344\345\346]",
                       "e":"[\350\351\352\353]",
                       "i":"[\354\355\356\357]",
                       "o":"[\362\363\364\365\366\367\368\369\370]",
                       "u":"[\371\372\373\374]",
                       "y":"[\375\377]"};
    	for (prop in exp)
    	{
    		var regExp = new RegExp(exp[prop],"gi");
    		retour = retour.replace(regExp,prop);
    	}
    	return retour;
    }
    A adapter pour ta substitution avec les bonnes correspondances...
    Peut-être existe t-il une "meilleure" solution qui substituerais tout en une fois ?

    Par rapport à ton problème de "tiret" -, je n'ai pas d'explication, si ce n'est que l'expression régulière doit accepter le tiret échappé ou non ?

    A+

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Je te remercie pour ta réponse.

    Pour le -, oui oui, ça marche, et c'est bien ce qui m'étonne vu que c'est censé être un caractère protégé (et ma question n'était que par pure curiosité).

    Pour la substitution multiple, tu confirmes donc que le javascript ne supporte pas nativement la substitution multiple comme le ferait par exemple PHP ? L'idée était surtout de limiter le nombre d'appel aux fonctions regexp plus que la réduction littérale du code.

    En attendant, je marque Résolu, mais si y'a une solution via un seul appel regexp/replace, je suis toujours preneur.

  4. #4
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par comode Voir le message
    Enfin, il me semble que le symbole - devrait également être protégé... Pourtant, que j'écrive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("\-" ,"g"), '6');
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    val = val.replace(new RegExp("-" ,"g"), '6');
    Le résultat est le même : ça marche... Dans un soucis de compréhension, quelqu'un aurait-il l'amabilité de m'expliquer pourquoi ?
    Le caractère "\", rencontré dans une regexp, permet de signifier au parseur que le prochain caractère doit être échappé, c'est-à-dire "pris en temps que caractère et non comme méta-caractère de la syntaxe propre aux regexp" (par exemple une parenthèse, un astérisque, un "+", etc.). Si le caractère (comme ici le trait d'union) n'a aucune signification particulière* dans le contexte d'un regexp, il n'y a "rien à échapper", donc les expressions régulières et sont équivalentes** ^^

    * Enfin, le trait d'union a une signification particulière quand même, SI il est présent entre deux crochets... ^^

    ** à une exception près : la première syntaxe ressemble quand même salement à un TIE fighter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Conversion excel to xml problème balise multiple
    Par arkhang dans le forum Excel
    Réponses: 4
    Dernier message: 01/04/2015, 10h48
  2. conversion un PDF vers TIFF ou multiple PNG
    Par charouel dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/07/2009, 18h56
  3. Multiples Conversions Images
    Par lerorodu51 dans le forum NetBeans
    Réponses: 2
    Dernier message: 28/05/2009, 14h00
  4. Réponses: 4
    Dernier message: 14/04/2009, 11h25
  5. Conversion et re-conversion des caractères reservé à MySQL
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/06/2004, 14h23

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