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 :

Construction d'une RegEx


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut Construction d'une RegEx
    Bonjour à tous,
    Quelqu'un pourrait-il m'aider à construire une RegEx pour tester un input qui pourrait contenir une taille soit en cm, soit en m:
    soit un entier sur 3 digit max (190) exprimé en cm , soit un float de 1 digit une virgule et deux digits après (1,96) exprimé en m.
    D'avance merci

  2. #2
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    0,00 ou 0.00 peut être testé par : ^(\d){1}[,.](\d){1,2}$
    000 peut-être testé par :^[\d]{3}$
    mais comment inclure un 'or' pour qu'il accepte l'un ou l'autre?

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Un pattern de base du travail peut être comme ça :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    ^\d{1,3}\s+cm|\d[,.]\d{1,2}\s+m$

  4. #4
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci Tsuji,
    l'opérateur 'or' est donc '|'
    j'ai donc ma solution, c'est = ^[\d]{3}|(\d){1}[,.](\d){1,2}$
    ça fonctionne parfaitement

    Encore merci

  5. #5
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Est-ce que tu peux essayer cela ?

    /^[1-9]{1}(\d){0,2}$|^(\d){1}[,.](\d){1,2}$/

    Empêche de faire une saisie entière qui commence par 0 ou 00.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci Badaze!
    C'est parfait.

  7. #7
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Re-bonjour,
    Bien que je sois sûr du regEx (Merci Badaze et Tsuji)
    Je ne comprend pas pourquoi le code suivant ne fonctionne pas !
    ResultTest reste désespérément 'false'

    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
    $("#P_Profil").on("change", "#Inp_Taille", function ()
    {
        G_Taille = $("#Inp_Taille").val();
        var reg = new RegExp("^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$");
        var ResultTestT = reg.test(G_Taille);
        console.log("Test " + ResultTestT);
        console.log("regT " + reg);
        if (ResultTestT)
        {
            console.log("On y passe");
            flgT = true;
            CalculIMC();
            CalculPoidsIdeal();
            $("#Inp_Taille").css("background-color", "rgba(255, 255, 255, 0.0)");
        } else
        {
            flgT = false;
            console.log("#Inp_Taille " + G_Taille);
            console.log("On y passe pas");
            $("#Inp_Taille").css("background-color", "#8a5757");
        }
    });
    Voir exemple sur https://jsfiddle.net/Goltar/j9pv0Lnq/8/

    Si quelqu'un avait l'amabilité de m'indiquer ou je me fourvoie?
    D'avance merci

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var reg = new RegExp(/^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$/); et non pas var reg = new RegExp("^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$");
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci!!!
    Simplement les doubles quotes?
    J'ai d'autres regex dans mon code qui fonctionnent parfaitement avec ! (bizarre!)
    Voilà pourquoi je ne parvenais pas à mettre le doigt dessus !
    Ok, je retiens pour la suite

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Citation Envoyé par badaze
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = new RegExp(/^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$/);
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = new RegExp("^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$");
    Vraiment ?! ça m'étonnerait, et je ne pense pas que ce soit vrai, du tout.

    Le problème c'est que les symboles ^ et $ nus ne puissent paraître que au début et à la fin du pattern. Il doit s'écrire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //var reg = new RegExp("^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$");
    var reg = new RegExp("^[1-2]{1}(\d){0,2}|[1-2]{1}[,.](\d){2}$");
    ou plus simplement, sans rien d'autre sous-entendu, comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = new RegExp("^[1-2]\d{0,2}|[1-2][,.]\d{2}$");

  11. #11
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Nom : dev001.jpg
Affichages : 283
Taille : 79,1 Ko

    J'ai essayé avec 1.20 et j'ai le même résultat.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  12. #12
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par tsuji Voir le message
    ou plus simplement, sans rien d'autre sous-entendu, comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = new RegExp("^[1-2]\d{0,2}|[1-2][,.]\d{2}$");
    La valeur 120.20 qui ne devrait pas être acceptée l'est.

    Nom : dev002.jpg
Affichages : 264
Taille : 48,5 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  13. #13
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Mes excuse; c'est parce que je pose avec la construction de new RegExp(), les 'escapes' doivent être dédoublés. Et avec la construction /.../, ce n'est pas nécessaire.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //var reg = new RegExp("^[1-2]{1}(\d){0,2}$|^[1-2]{1}[,.](\d){2}$");
    var reg = new RegExp("^[1-2]{1}(\\d){0,2}|[1-2]{1}[,.](\\d){2}$");
    var reg = /^[1-2]{1}(\d){0,2}|[1-2]{1}[,.](\d){2}$/;
    var reg = /^[1-2]\d{0,2}|[1-2][,.]\d{2}$/;

  14. #14
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    @tsuji : Quoi qu'il en soit, la regexp var reg = /^[1-2]\d{0,2}|[1-2][,.]\d{2}$/; autorise 121.12.
    /^[1-9]{1}(\d){0,2}$|^(\d){1}[,.](\d){1,2}$/ n'est peut être pas académique mais ça fonctionne. Non ?

    @Goltar : ATTENTION avec la modification que tu as faite sur la regexp [1-2] tu peux saisir 120 mais pas 30.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  15. #15
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci pour votre temps !
    En effet Badaze, ma modification [1-2 ]est voulue, comme il s'agit de taille humaine (Adulte). Il est très rare que l'on soit sous le mètre et plus grand que 2,99m.
    Comme pour la valeur 120.20 je ne désire pas que l'on puisse l'introduire je ne tiens pas compte des millimètres. On dit rarement je mesure 196,8 cm

    Si j'en déduit de votre échange: pas de double quote (en général)

    /^[1-9]{1}(\d){0,2}$|^(\d){1}[,.](\d){1,2}$/ n'est peut être pas académique mais ça fonctionne. Non ?
    Quel serait la version académique?
    Existe t-il une partie du forum dédié au RegEx en particulier ?

  16. #16
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Saisie de 50 cm à 299 ou de 0.50 à 2.99.

    Pas entièrement testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     //           100-299   |  50-99     |   1.00-2.99    |   0.50-0.99
     var reg = /^[1-2]\d{2}$|^[5-9]\d{1}$|^[1-2][,.]\d{2}$|^0[,.][5-9]\d{1}$/;
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  17. #17
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci Badaze!
    Cà fonctionne parfaitement!

    Excuse moi d'abuser de ton temps, pour le suivant je dois tester le poids j'essaie le regex suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regP = new RegExp(/^[1-9]{2,3}$|^\d{2,3}[,.]\d{2}$/);
    qui devrait permettre l'intro d'un nombre soit, un entier sur deux ou trois digits
    soit idem + une virgule ou un point + deux décimales
    tout fonctionne parfaitement il accepte les nombres avec décimales comme prévu.
    Par contre les nombres entiers, il refuse les nombres entre 100 et 110 ????

    OK RESOLU J'ai compris, je n'ai pas inclus les zéros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var regP = new RegExp(/^\d{2,3}$|^\d{2,3}[,.]\d{2}$/);

  18. #18
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Essaie ça. A peine testé.
    Cà gère sans décimale ou avec 2.
    Je pense qu'on peut faire mieux mais je n'ai pas le temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     //                          100-299                  |           10-99               |          0-9
     var reg = new RegExp(/^[1-2]{1}\d{2}([,.]\d{2}){0,1}$|^[1-9]{1}\d{1}([,.]\d{2}){0,1}$|^[0-9]{1}([,.]\d{2}){0,1}$/);
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  19. #19
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    C'est parfait Badaze!
    Merci

  20. #20
    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 636
    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 636
    Points : 66 655
    Points
    66 655
    Billets dans le blog
    1
    Par défaut
    une reg se syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var reg= /.../
    ou new RegExp ("stringreg")
    en factorisant et rationalisant un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = /^(([1-2]\d{2})|([1-9]\d)|[0-9])([,.]\d{2})*$/;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = new RegExp("^(([1-2]\d{2})|([1-9]\d)|[0-9])([,.]\d{2})*$");
    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 !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [débutant C#]construction d'une dll en dotnet..
    Par just1980 dans le forum C#
    Réponses: 20
    Dernier message: 19/08/2010, 16h53
  2. [RegEx] php et javascript dans une regex
    Par grochenel dans le forum Langage
    Réponses: 7
    Dernier message: 06/12/2005, 23h21
  3. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 20h07
  4. [RegEx] spliter par rapport a une regex en récuperant la regex
    Par Khrysby dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2005, 16h08
  5. construction d'une classe
    Par r0d dans le forum C++
    Réponses: 10
    Dernier message: 16/09/2004, 18h35

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