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 :

Syntaxe Expression reguliere [RegExp]


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut Syntaxe Expression reguliere
    Bonjour

    Actuellement je souhaiterai valider une chaine de charactère avec la condition suivante :
    string(a-z) + 0-9 + '-' + '_' autorisé.

    J'ai donc utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var exp=new RegExp("[a-zA-Z0-9\-_]$");
    Le problème c'est que les espaces et charactères comme le & fonctionnent ...

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Par défaut
    Salut, il y a deux soucis dans ton code :

    1 - tu n'as pas mis dans ton expression l'ancre de départ (^), seulement l'ancre de fin ($). Du coup du moment que ta chaine de caractère se termine par un caractère valide, ton test passe. Peu importe si avant certains caractères étaient invalides, l'évaluateur de regex va juste faire du backtracking en démarrant un caractère plus loin jusqu'à obtenir un match.

    2 - Tu utilise le constructeur RegExp au lieu de la syntaxe littérale, ce qui est très très moche ! Tu ne dois utiliser le constructeur uniquement quand tu construit une expression dynamiquement. Pourquoi donc ? car lorsque tu utilise le constructeur tu dois lui passer une String donc :

    - tu peux faire une croix sur la coloration syntaxique
    - tu cumules deux niveau d'échappement (la string et la regex) et pour peu que tu recherche des classes de caractères, des antislashs ou des quotes, tu as vite fait de te retrouver avec des échappements incompréhensibles avec des doubles, triples voir quadruples antislashs. Et la...


    Donc pour résumer, en rajoutant l'ancre de départ et la bonne syntaxe cela te donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var str = "hello-world_-42_azerty";
    var exp = /^[a-zA-Z0-9\-_]*$/;
     
    console.log(exp.test(str));
    que l'on peut simplifier en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var str = "hello-world_-42_azerty";
    var exp = /^[\w-]*$/;
     
    console.log(exp.test(str));

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Parfait merci beaucoup pour tes explications.

    Cela fonctionne parfaitement et c'est propre maitenant

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/09/2009, 16h15
  2. syntaxe Express Reguliere
    Par sasuke123456 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/02/2009, 14h13
  3. [langage] [expression reguliere] : syntaxe
    Par arcane dans le forum Langage
    Réponses: 8
    Dernier message: 25/09/2003, 13h03
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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