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 :

Regexp qui renvoie tout le temps false [RegExp]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 40
    Points
    40
    Par défaut Regexp qui renvoie tout le temps false
    Bonsoir,

    Voici ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script>
        function numerique(){
            var str = "555.05";
            var re = new RegExp("^(\d+(?:[.,]\d{1,7})?)$", "g");
            var myArray = re.test(str);
            alert(myArray);
        }
    </script>
    La regexp est sensé accepter ma variable 555.05 car celle-ci est faite pour accepter un numérique avec n'importe quel entier avec au max 7 décimales

    quand je test ma regexp ici
    http://www.pagecolumn.com/tool/regte...me=1&ts=555.05
    ca fonctionne bien

    mais dans mon code le alert me renvoie toujours false.

    quelqu'un à une idée de l'erreur que j'ai pu faire ?

  2. #2
    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 : 53
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var re = /^(\d+(?:[.,]\d{1,7})?)$/g;
    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

  3. #3
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 40
    Points
    40
    Par défaut
    Merci pour votre réponse

    ça marche bien avec votre réponse et pour la valeur 555.05
    mais pour la valeur 555,1234567 par exemple
    j'ai un retour false.
    alors que ici
    http://www.pagecolumn.com/tool/regte...=555%2C1234567
    le retour est bon

  4. #4
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 40
    Points
    40
    Par défaut
    En fait, ca ne marche pas vraiment.

    J'ai fait un bouton qui execute ce code javascript.
    et ca marche un coup sur deux.

    Etrange .... :'(

  5. #5
    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 : 47
    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 kara.ci Voir le message
    celle-ci est faite pour accepter un numérique avec n'importe quel entier avec au max 7 décimales
    [...]
    quelqu'un à une idée de l'erreur que j'ai pu faire ?
    Une erreur de vocabulaire peut-être ?

    Citation Envoyé par kara.ci Voir le message
    En fait, ca ne marche pas vraiment.

    J'ai fait un bouton qui execute ce code javascript.
    et ca marche un coup sur deux.

    Etrange .... :'(
    Le code du bouton en question nous aiderait franchement à deviner le problème ^^

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je trouve également que les résultats de test() sont bizarres.
    Alors que match() donne les résultats attendus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var tab = ["555.05", "555.2563", "100.005", "00,00", "-120,58"];
     
    for (var i = 0; i < tab.length; i++){
    	console.log(tab[i], tab[i].match(/^\d+[.,]\d{1,7}$/g), /^\d+[.,]\d{1,7}$/g.test(tab[i]));
    }
     
    /*
     * 555.05 	["555.05"] 		true
     * 555.2563 ["555.2563"] 	false
     * 100.005 	["100.005"] 	true
     * 00,00 	["00,00"] 		false
     * -120,58 	null 			false
     */

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    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 : 53
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Je trouve également que les résultats de test() sont bizarres.
    Alors que match() donne les résultats attendus.
    Oui, tu as raison, si je me souviens bien (et si c'est pas le cas, je connais une grenouille qui saura le faire remarquer ), la méthode test() (tout comme l'utilisation de new RegExp) positionne un pointeur dont la position dépend des résultats précédents, ce qui n'est pas le cas de l'initialisation littérale (mon exemple) ou de la méthode match() (ton exemple).
    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

  8. #8
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    En effet, les méthodes test et match des RegExp ont un pointeur implicite si la RegExp a un marqueur g.
    Notez que exec() permet de récupérer les captures.
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> var s = 'XaXbXc'
    >>> var rx = /X(.)/g
    >>> rx.exec(s)
    ["Xa", "a"]
    >>> rx.exec(s)
    ["Xb", "b"]
    >>> rx.exec(s)
    ["Xc", "c"]
    >>> rx.exec(s)
    null



    Le problème quand on utilise le constructeur new RegExp() c’est qu’on lui passe une chaîne, et dans cette chaîne les backslashes doivent être échappés.
    Sinon il essaye lui-même d’échapper le caractère suivant, et ça peut surprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "X\tX" devient "X	X"
    "X\nX" devient "X
    X"
    "\u0024" devient "$" (unicode)
    (y’en a d’autres)
     
    et pour les caractères « non échappables » (normaux) :
    "\a" devient "a" : le backslash disparaît !
    (Notez comment ce forum colore de telles « entités ».)

    Ainsi, imaginons un pattern qui doive matcher des chaînes comme "5\8", "32\17", etc. On a déjà un backslash littéral à matcher.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var rx = /^(\d+)\\(\d+)$/
    En version « chaîne », ça donne :
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var rx = new RegExp("^(\\d+)\\\\(\\d+)$")
    Vous voyez, c’est plutôt moche

    Edit: Hey, j’ai trouvé quelque chose dans un vieux post de SpaceFrog En fait c’est pas un pointeur caché, c’est la propriété lastIndex de la regexp, et on peut la remettre à 0 manuellement ! Un mystère de moins pour moi
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    reg.lastIndex, en effet cela me revient en mémoire (http://www.developpez.net/forums/d93...t/#post5275921)

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  10. #10
    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 : 47
    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 demi HS
    Excusez-moi de profiter de l'occasion mais... ça me fait penser qu'en ce qui me concerne, je passe presque systématiquement (mais plutôt par habitude en fait ) par des littéraux pour déclarer des regexp, jamais par le constructeur utilisant une chaine, même si je le connais à force de le rencontrer à droite à gauche.
    Je me demandais : quels avantages à passer par le constructeur ? dans quelles situations est-ce plus efficace/judicieux ? si vous avez un avis là-dessus ça m'intéresse.

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  11. #11
    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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Pour la fameuse histoire du pointeur de la regexp, il suffit de faire un coup à blanc afin de réinitialiser le pointeur

    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Merci pour toutes ces explications.

    J'ai utilisé l'astuce de SpaceFrog avec le

    et ca fonctionne à merveille maintenant.

    Merci de votre aide.

    Kara

  13. #13
    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 637
    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 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    le désormais célèbre "une fois sur deux"
    et vous tombez toujours dans le panneux les gars !!
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Bonsoir.

    reg.lastIndex, en effet cela me revient en mémoire (http://www.developpez.net/forums/d93...t/#post5275921)
    Ah pardon c’était toi, rendons à César ce qui appartient à César


    J’ai fait un speedtest pour voir quel était le plus rapide entre
    et
    Résultat : Sous FF3 et IE8, différence négligeable… Perso je penche pour la version lastIndex, ça me paraît plus lisible.

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 19/02/2008, 14h10
  2. Réponses: 2
    Dernier message: 04/01/2008, 22h28
  3. Page Aspx qui saute tout le temps
    Par alves.seb dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/07/2007, 11h30
  4. Mon checkbox renvoie tout le temps 'on'
    Par starr dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/06/2007, 14h30
  5. [Debutant] image,texte qui reste tout le temps a l'ecran
    Par mariogarcia dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/03/2006, 13h12

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