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 :

contraindre une chaîne [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut contraindre une chaîne
    Bonjour,
    j'ai un petit problème je cherche à vérifier si une chaine est de la forme:
    "^[0-9]+(D|M|W|H|S)?"
    En fait je veux que la chaine commence par au moins un chiffre et qu'elle puisse se terminer par un D ou un M ou un W ou un H ou un S... Si la chaine ne comprend que des chiffres elle est valide.

    exemple de chaine:

    A pas valide
    A2 pas valide
    2AM pas valide
    2HM pas valide
    2H3 pas valide

    2 valide
    234517 valide
    234517M valide
    222222222H valide

    avec l'expression tel que je l'écris "^[0-9]+(D|M|W|H|S)?"
    il vérifit bien que la chaine commence par un chiffre mais derriere je peux mettre n'importe quoi et il accepte...Comment ça se fait?

    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    je ne suis pas sur, mais en mettant entre crochet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ^[0-9]([D|M|W|H|S])?

  3. #3
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Bonjour,
    merci pour ta réponse ^^
    Bonjour,
    je ne suis pas sur, mais en mettant entre crochet
    Code :

    ^[0-9]([D|M|W|H|S])?
    Non malheuresusement ça ne fonctionne pas il accepte toujours des chaines du type:
    2AM
    3MR


  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600

  5. #5
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Non rien à faire... Il prend toujours des chaines avec des lettres qui ne sont pas spécifiées
    J'ai essayé de mettre un $ à la fin mais cette fois il prend plus rien....
    Je comprends pas..

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par yoshï Voir le message
    avec l'expression tel que je l'écris "^[0-9]+(D|M|W|H|S)?"
    il vérifit bien que la chaine commence par un chiffre mais derriere je peux mettre n'importe quoi et il accepte...Comment ça se fait?
    Bonjour,

    l'opérateur ? signifie que ce qui précède doit être présent 0 ou 1 fois.

    Donc ta regex vérifie que ta chaîne commence par un (des) chiffre(s) suivis éventuellement d'un D, M, W, H, S. Mais comme tu n'as pas ajouté l'opérateur $, çane vérifie pas que la chaîne ne se poursuis pas...

    avec "^[0-9]+(D|M|W|H|S)?$", seules les chaînes contenant exactement un (des) chiffre(s) suivis éventuellement d'un D, M, W, H, S seront validées...

    Edit : comme le proposais MaitrePylos, cette regex peut avantageusement être remplacée par "^[0-9]+[DMWHS]?$"

  7. #7
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Merci pour vos réponses
    comme dit un peu plus haut j'ai essayé de terminer l'expr régulière par un $
    mais il n'accepte pas grand chose avec "^[0-9]+[DMWHS]?$"

    par exemple:
    1H ne passe pas
    33D ne passe pas non plus....
    Je pige pas

  8. #8
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Tu peux nous montrer ton code ?

    Parce que j'ai testé, et le code suivant fonctionne (renvoie 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $test = ereg("^[0-9]+[DMWHS]?$", "1H");
    var_dump($test);

  9. #9
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!eregi("^[0-9]+[DMWHS]?$",$tab_reponse[10])){
    				$modif=false;
    				$erreur=utf8_encode(' Syntaxe incorrecte pour le champs "TTL minimum" = '.$tab_reponse[10]);
    			}
    si $tab_reponse[10] = 2AD il rentre dans le if (ce qui est normal)
    mais $tab_reponse[10]= 2D ou 22, il rentre aussi (ce qui n'est pas normal)....

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    est-tu sur de ce qui passe dans ta variable, parce que je viens de tester et tout est correcte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!eregi("^[0-9]+[DMWHS]?$",'125448H')){
    				$modif=false;
    				echo utf8_encode(' Syntaxe incorrecte pour le champs "TTL minimum" = '.$tab_reponse[10]);
    			}else{echo 'c\'est bon';}

  11. #11
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Merci pour ta réponse,

    En fait la variable $tab_reponse[10] correspond à une chaine extraite d'un textarea et découpé selon les espaces ... Mais j'avais oublié de virer les sauts de ligne "\n" . Avec ces caractères cachés c'est sur que ça pouvait pas marché...

    Merci à tous

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 3
    Dernier message: 28/09/2003, 10h46
  3. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  4. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 02h27
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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