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 :

Condition sur regExp [RegExp]


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Condition sur regExp
    Bonjour à tous,

    Je suis à la recherche d'une explication lumineuse concernant un comportement que je n'arrive pas à comprendre.

    Voilà le contexte :
    Je récupère (en Jquery) dans une variable la valeur de la saisie d’une adresse mail dans un champ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mail = $('#adressMail').val();
    Je défini une expression régulière pour vérifier la structure de l’adresse mail (Je ne sais pas si cette expression et la plus optimisée mais elle fonctionne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex_mail = new RegExp("[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+", "g");
    Je vérifie dans la console si la saisie est conforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log("Test de validité de l'adresse mail : " + regex_mail.test(mail));
    Là la console m'affiche -> Test de validité de l'adresse mail : true

    J’effectue un test pour orienter les traitements en fonction de la validité de l’adresse mail.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If (regex_mail.test(mail)) {
    	// Traitement si adresse OK
    } else {
    	// Traitement si adresse NOK
    }
    Constat :
    Quel que soit l'information affichée dans la console, c’est toujours le bloc « Traitement si adresse NOK » qui est exécuté.

    Avez-vous une idée pour expliquer ce qui se passe ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Bonjour,
    c'est volontaire le If ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    c'est volontaire le If ?
    Non, erreur de saisie il faut lire if

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Comme tu utilise le marqueur global g la recherche suivant commence à partir de la nouvelle valeur de lastIndex.

    Je te propose de tester avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    console.log("Test de validité de l'adresse mail : " + regex_mail.test(mail));
    console.log(regex_mail.lastIndex)   
    // replace le lastIndex
    regex_mail.lastIndex = 0;
    if (regex_mail.test(mail)) {
      console.log("Traitement si adresse OK");
    }
    else {
      console.log("Traitement si adresse NOK");
    }

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Si tu lances deux fois de suite le test reg le test se fait en effet à partir du dernier indexe trouvé dans la string.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    reg= new RegExp('a','g');
    chaine="aaa";
    console.log( reg.test(chaine), reg.lastIndex);
    console.log( reg.test(chaine), reg.lastIndex);
     
    reg.lastIndex=0; // il repart au début
    console.log( reg.test(chaine), reg.lastIndex);
    console.log( reg.test(chaine), reg.lastIndex);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Bonjour à tous et merci pour ces explications.

    Je débute avec les expressions régulières et je n’avais vu nulle part la notion de « lastIndex ».

    En conclusion et je trouve ça paradoxale mais très amusant, si je n’avais pas voulu contrôler la réponse à la fonction « test() » en affichant dans la console le résultat de ce test, je n’aurais pas rencontré de problème.
    Je me suis buggé le script tout seul

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

Discussions similaires

  1. [regexp] Condition sur un string
    Par Benladouche dans le forum MATLAB
    Réponses: 7
    Dernier message: 15/07/2009, 10h26
  2. UPDATE avec condition sur d'autres tables
    Par guda dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/03/2005, 11h20
  3. [XSLT][ACCESS]condition sur valeur
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 23
    Dernier message: 10/01/2005, 14h14
  4. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25
  5. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04

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