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 :

Petite vérification d'expression régulière [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut Petite vérification d'expression régulière
    Bonjour,

    Je viens de trouver cette expression régulière, servant à vérfier la conformité de la forme d'une adresse email :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match( "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-z]{2,4}$/", $_POST["mail"] )
    1)Pourriez-vous me confirmer qu'elle est valable.
    Par exemple, je viens de constater qu'un email tel que bob@bob..com peut passer, mais je ne crois pas que ce soit un standard valide pourtant.

    2) Aussi, si vous pouviez me filer l'expression régulière permettant de vérifier qu'il n'y a que des lettres dans un champs, ce serait sympa .

    (Peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("/^[a-zA-z],$_POST["mail"])
    ? )

    3) Je voudrais bien comprendre ce que signifie le {2,} et le {2,4} dans l'expression d'en haut.


    Merci pour vos lumières.
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Je viens d'essayer cela pour vérifier si il n'y a que des lettres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match( "/^[a-zA-Z]$/", $_POST["identite"] ))
    ça ne fonctionne pas.
    C'est pas parce que j'ai tort que vous avez raison.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    je viens d'essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match( "/^[:alpha:]+$/", $_POST["identite"] ))
    J'obtiens le poème suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_match(): Compilation failed: POSIX named classes are supported only within a class at offset 1 in /home/site/scripts/dico/envoiMail.php on line 10
    Je viens aussi d'essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match( "^[:alpha:]+$", $_POST["identite"] ))
    Cette fois j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_match(): No ending delimiter '^' found in /home/site/scripts/dico/envoiMail.php on line 10
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon maintenant je viens d'essayer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match( "/^[A-Za-z]+$/", $_POST["identite"] ))
    Cette fois cela fonctionne sauf si il y a des majuscules.




    *edit* ça fait un peu de la peine de s'auto répondre.
    C'est pas parce que j'ai tort que vous avez raison.

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    3) Je voudrais bien comprendre ce que signifie le {2,} et le {2,4} dans l'expression d'en haut.
    A moins que je ne dise de betise
    {2,} signifie "au moins deux fois"
    {2,4} signifie "au moins deux fois, jusqu'à quatre fois"
    Ceci s'applique a l'élément précédent.
    donc [a-z]{2,} signifie "au moins deux carateres de a à z"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2) Aussi, si vous pouviez me filer l'expression régulière permettant de vérifier qu'il n'y a que des lettres dans un champs, ce serait sympa
    [a-zA-z]
    Je pense que sa donne : preg_match("[a-zA-z]",$_POST["mail"])

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci ePox pour ta réponse, je commencais à désespérer.

    Cela étant je viens d'essayer, cela, inspiré par ton expression régulière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match("[a-zA-z]",$_POST["identite"]))
    {$avertissement='identite ok';}
    else{$avertissement='identite non conforme';}
    Pour le test, j'ai écrit test et test test mais ça ne passe pas, j'obtiens "identité non conforme".
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    y'à quoi dans post["identite"] ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Et bien comme j'ai dit, j'ai écrit test.

    je viens d'essayer cela (réessayer?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match( "`^[a-zA-Z]`" ,$_POST["identite"])
    J'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_match(): No ending delimiter '^' found in /home/site/scripts/dico/envoiMail.php on line 10

    C'est vraiment pénible de passer 3 heures pour une broutille comme ça...
    C'est pas parce que j'ai tort que vous avez raison.

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    if(preg_match("`^[a-zA-z]*$`","zerzerzerezr")){$avertissement='identite ok';} 
    else{$avertissement='identite non conforme';} 
     
    echo $avertissement;
    ?>
    Celle ci devrait être correct.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Oui et non :

    Il y a un problème avec les majuscules, selon leur position :
    -'Test test' fonctionne bien.
    -'test Test' ne fonctionne pas.
    Les chiffres sont bien filtrés par contre.

    (En plus il faudrait prendre en compte les accents).


    Bien sur je peux tout passer par strtolower avant et virer tous les accents. Mais c'est bidon, normalement une bonne régex doit régler tout ça à elle seule.

    **edit**
    Que signifie ton *$, ePox ?
    J'ai essayé avec a-zA-Z aussi, même problème avec les majuscules.
    C'est pas parce que j'ai tort que vous avez raison.

  11. #11
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Le étoile c'est pour dire qu'il peut y avoir 0 à n occurences.

    Le dollar, c'est poure dire que la chaine doit terminer par tel schéma, c'est le complémentaire du chapeau.

    Pour les accents je ne sais pas torp comment faire sans se prendre la tête :s

    Mais sa pourrait donner cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(preg_match("`^([a-zA-z- -é]*)$`","R dfgéfd gdfgdffc")){$avertissement='identite ok';} 
    else{$avertissement='identite non conforme';}

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Non c'est caca, même les chiffres passent.

    Bon, je vais essayer le truc pourri qui consiste à virer d'abord les accents et à tout passer en minuscule et après je vous dis si je sais voler.
    C'est pas parce que j'ai tort que vous avez raison.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Je viens de tester cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $identite2=strtolower($identite);
     $a = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ";
     $b = "aaaaaaooooooeeeeciiiiuuuuyn";
    $identite2= strtr($identite2, $a, $b);
     
    if(preg_match("`^[a-z]*$`",$identite2))
    {$avertissement='identite ok';} 
    else{$avertissement='identite non conforme';}
    cela fonctionne avec TEST et test mais si il y a deux mots, ou plus, cela foire de nouveau.
    C'est pas parce que j'ai tort que vous avez raison.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    C'est réellement insupportable, je viens d'essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("`[[:alpha:]]`" ,$identite2)
    et les chiffres passent encore.........
    C'est pas parce que j'ai tort que vous avez raison.

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Désolé pour le temps de réponse : pour ma part, je n'ai pas le Net en permanence.
    Essaie avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $email = 'bob.a@ta.zs.fr';
    echo preg_match('/^[a-z0-9_-]+(\.[a-z0-9_-]+)*+@[a-z0-9-]{2,}\.[a-z]{2,4}$/i', $email);
    Cela t'affiche "1" si l'adresse est valable, "0" sinon.
    Cela dit, je n'ai pas lu la RFC donc l'expression peut être erronnée...

    Si tu ne souhaites pas t'embêter avec les problèmes de casse, utilise le modificateur "i".
    Pour vérifier qu'il n'y a que des lettres dans une chaîne, utilise ceci :
    Mais cela ne te donnera que les lettres de l'aplhabet anglais... Si tu veux en ajouter, voici la marche à suivre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/^[a-zéèàûüç]$/i
    Si tu utilises preg_..., alors tu dois utiliser un délimiteur en début et en fin d'expression. Ce délimiteur peut être n'importe quoi mais tu dois le mettre de chaque côté de ton expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    '^[a:alpha:]+$' // incorrect
    '/^[a:alpha:]+$/' // correct
    '#^[a:alpha:]+$#' // correct
    Dans la première expression, PHP considère ton ^ comme un délimiteur (puisque c'est le premier caractère de la chaîne) mais il ne le trouve pas à la fin, d'où l'erreur.
    En revanche, je ne peux pas t'aider pour l'utilisation des classes comme :alpha:, je ne les aime pas trop (je les trouve incomplètes). Et il me semble absurde de devoir donner au moins autre chose (ici : "a") pour être en mesure d'utiliser ces classes POSIX...

    Je te recommande d'utiliser le modificateur "i" plutôt que de mettre des classes du genre [a-zA-Z] car c'est plus facile à modifier alors que ça revient au même. Cependant, je ne sais pas si ce modificateur fonctionne pour les caracères spéciaux ou accentués...

    Les accolades {} servent à définir le nombre de caractères que tu souhaites, un peu comme *, + et ? mais en plus précis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ?       zéro ou une fois
    *       de zéro à un nombre infini de fois
    +       de une à un nombre infini de fois
    {1}     un caractère
    {4}     quatre caractères
    {1,4}   de un à quatre caractères
    {1,}    de un à un bombre infini de caractères
    Si je ne me trompe pas, les paires suivantes sont équivalentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ?   {0,1}
    *   {0,}
    +   {1,}

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci infiniment pour ta réponse très complète Kirkis.

    Cela étant je dois vraiment être con comme un balais, parce que ça ne fonctionne toujours pas.

    Je viens d'essayer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match('/^[a:alpha:]+$/' ,$identite))
    {$avertissement='identite ok';} 
    else{$avertissement='identite non conforme';}
    et cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(preg_match("/^[a-z]$/i" ,$identite))
    {$avertissement='identite ok';} 
    else{$avertissement='identite non conforme';}
    Mais si j'entre le mot "test" dans le formulaire, j'obtiens dans les deux cas "identité non conforme"
    C'est pas parce que j'ai tort que vous avez raison.

  17. #17
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Tu dois effectivement être un manche (j/k) car ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $identite = 'test';
    if(preg_match('/^[a-z]+$/' ,$identite))
    {$avertissement='identite ok';}
    else{$avertissement='identite non conforme';}
    echo $avertissement;
    Pour la classe POSIX, j'ai averti que je ne suis pas un expert :/

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon oui, alors je viens de réessayer :

    Cela fonctionne en effet mais pas si il y a deux mots.
    C'est pas parce que j'ai tort que vous avez raison.

  19. #19
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Bah non : l'espace n'est pas une lettre entre a et z...
    [Edit] Je crois que je viens de piger les classes POSIX...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^[[:alpha:]]+$/   semble équivaloir   /^[a-z]+$/i

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok !

    Alors je viens de reprendre ta regexp et j'ai rajouté i à la fin, comme suit:

    Le i permet donc d'ignorer la casse (je te l'explique pour que tu saches le faire seul une autre fois Kirkis ).


    La vache 6 heures pour ça quand même.....
    C'est pas parce que j'ai tort que vous avez raison.

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

Discussions similaires

  1. Vérification d'expression régulière
    Par DelphiCool dans le forum BIRT
    Réponses: 2
    Dernier message: 06/06/2010, 21h32
  2. [RegEx] Petite broutille sur expressions régulières
    Par Sanceray3 dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2009, 14h00
  3. petit problème d'expression régulière
    Par stoyak dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 11h20
  4. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33
  5. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 20h48

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