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

Langage PHP Discussion :

Difficulté à la création d'une regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut Difficulté à la création d'une regex
    Bonjour,
    J'ai quelques difficultés a crée un regex un peu particulier, et j'avouerai que je débute un peu dans les regex, si quelqu'un aurait la générosité de m'aider .
    J'aimerai que ce regex autorise les chaines de caractères majuscules et minuscule mais en ce qui concerne les majuscules il ne faut pas plus que 3 d'affilée.
    On autorise également les "." et "-".
    Voila ce qui est valide:"AAA A.B.C.D Fais Un Test Spec-TI"
    N'est pas valide:"AAAA ABCD tes#t"

    Merci d'avance pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 60
    Points
    60
    Par défaut A tester
    Bonjour,

    Est-ce que cette expression convient : [a-z(A-Z){1,3}\.\-]*

    Je ne l'ai pas testée.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    tous d'abord merci pour ton aide.
    En testant ta fonction via un site web comme http://www.regexr.com/ je remarque qu'il laisse passé plus de 3majuscules d'affilée.
    Voici une image:
    Nom : regex.PNG
Affichages : 236
Taille : 5,4 Ko

    J'ai essayé différent types de combinaison mais je n'arrive jamais au bon résultat .
    Cordialement,
    Zoners

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 60
    Points
    60
    Par défaut Cette solution fonctionne mais il faut effectuer d'autres tests
    Voici une solution qui répond à tes 2 cas de tests:

    ^[a-zA-Z\s\.\-]*[A-Z]{0,3}$

    A vérifier sur d'autres cas.

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    Testez cette page ".html" avec votre navigateur favori !...
    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
    <html><head>
         <script type="text/javascript">
         function controle()
              {
         chaine = document.forms[0].elements['saisie'].value ;
     
         if ( /^(([a-z]+|[A-Z]{1,3})[ \.-])*([a-z]+|[A-Z]{1,3})$/.test(chaine) == true )
              alert ("OK") ;
         else
              alert ("Cette chaine de caractère n'est pas valide ") ;
              }
         </script>
    </head><body style="font: 16px verdana;" onload="document.getElementById('saisie').focus()"> 
         <FORM method="POST" onsubmit="controle()">
              Entrez une chaine de caractères : 
              <input name="saisie" type="text" maxlength=20>
              (Longueur 20 : Majuscules, minuscules, séparés par un point ou un tiret)
              <br><br>
              <input type="submit">
         </FORM>
    </body></html>
    La regex devrait être correcte, suivant vos indications...
    Attention votre expression ne doit pas commencer ni finir par " " ou "." ou "-"... (règle à affiner si vous tolérez les espaces en fin de chaine)
    Les groupes de lettres sont, soit en minuscules, soit en Majuscules (ils ne sont pas mixtes)...

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Bonjour Iakou,
    Le dernier regex que tu as fourni semble bien fonctionner.
    Serait-il éventuellement possible d'autoriser le mixte de lettre majuscule et minuscule? (tous en prenant en compte qu'il ne faut pas plus de trois majuscules qui se suive)
    Merci d'avance.

    Cordialement,
    Zoners

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonsoir.

    Si je mixe 1 groupe de Majuscules avec des minuscules (Ex: aaBBByy) je n'y arrive pas en une seule Regex.
    Je suis forcé de vérifier si la chaine se termine par un séparateur (" " ou "." ou "-")
    Testez cette nouvelle page :
    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
    23
    24
    25
    26
    27
    <html><head>
         <script type="text/javascript">
         function controle()
              {
         chaine = document.forms[0].elements['saisie'].value ;
     
         if ( /[ \.-]$/.test(chaine) == true )
              {
              last_char = chaine.substring(chaine.length-1, chaine.length) ;  
              alert ("Cette chaine se termine par le séparateur \"" + last_char + "\"") ;  
              return ;
              }
         if (  /^(([a-z]*[A-Z]{0,3}[a-z]*)[ \.-])*([a-z]*[A-Z]{0,3}[a-z]*)$/.test(chaine) == true )
              alert ("OK") ;
         else
              alert ("Cette chaine de caractère n'est pas valide ") ;
              }
         </script>
    </head><body style="font: 16px verdana;" onload="document.getElementById('saisie').focus()"> 
         <FORM method="POST" onsubmit="controle()">
              Entrez une chaine de caractères : 
              <input name="saisie" type="text" maxlength=20>
              (Longueur 20 : Majuscules, minuscules, séparés par un point ou un tiret)
              <br><br>
              <input type="submit">
         </FORM>
    </body></html>
    Sinon ça a l'air de bien fonctionner !..
    - Le problème vient du 2ème groupe de la regex : s'il est vide la chaine se terminera inévitablement par un séparateur...
    - Ou alors si on est sûr que la chaine contient toujours au moins une minuscule ou un groupe de Majuscules, je peux simplifier...
    Cela éviterait d'ailleurs l'anomalie de la chaine vide, car actuellement une chaine vide sort "OK"...

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Bonjour Iakou,
    Je pense que cette nouvelle approche fonctionne parfaitement.
    Je n'est pas précisé mais en réalité il y a au préalable, une vérification de la chaine de caractère qui vérifie si le champ n'est pas vide et si ca longueur est comprise entre 5 caractères et 40 caractères.
    Donc si je ne me trompe pas ta chaîne fonctionnera bien dans tous les cas avec cette vérification?
    Merci d'avance pour ton aide.
    Cordialement,
    Zoners

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.
    Oui le cas "chaine vide" étant détecté antérieurement par une routine spécifique, il n'y aura pas d'équivoque !
    Bonne journée.

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    Merci pour ton aide et de m'avoir confirmer le cas spécifique .
    Je marque le sujet comme résolu encore un grand merci .
    Cordialement,
    Zoners

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Il y a plus rapide:



    Comme ça tu testes d'un coup le format de la chaîne (taille comprise).

    Pour ce pattern, les conditions sont les suivantes:

    • entre 5 et 40 characters
    • uniquement des lettres ASCII, des espaces, des points, des tirets
    • 3 lettres majuscules consécutives maximum
    • la chaîne doit commencer et finir par une lettre


    J'espère que cela correspond bien à ce que tu cherches.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. [XL-2013] Difficultés pour la création d'une macro sur deux colonnes de nombres
    Par mr_hodor dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/07/2014, 12h49
  2. [RegEx] Création d'une Regex d'exclusion
    Par Phiss dans le forum Langage
    Réponses: 6
    Dernier message: 20/02/2013, 22h32
  3. Difficultés avec une regex ou charset
    Par lecroquant dans le forum Langage
    Réponses: 0
    Dernier message: 08/01/2012, 14h00
  4. Création d'une Regex (TextBox Float)
    Par snakzbenjy dans le forum Silverlight
    Réponses: 2
    Dernier message: 13/04/2011, 20h07
  5. Difficulté de création d'une requête
    Par defcon_suny dans le forum Requêtes
    Réponses: 31
    Dernier message: 16/07/2008, 09h34

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