[Expression régulière]Chaine de 9 chiffres

Résolu
Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   -  
Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour

Voila je suis une bille en expression régulière et j'aimerais bien un peu d'aide ;p

Je voudrais vérifier qu'une chaine n'est composée que de 9 chiffres ni plus ni moins.

Exemple : 123456789

Est que quelqu'un aurait une idée de comment faire ?

Merci d'avance.

PS : j'ai trouver un petit site pratique pour tester les expressiosn régulières
http://www.annuaire-info.com/expression-reguliere.html
--
Mar-plij ur chopinad bier melen !!
Configuration: Windows XP
Firefox 2.0.0.4

6 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    $str = 'Le nombre 123456789 possède 9 chiffres.';

    Ce n'est pas vraiment nécessaire
    '/.*?([0-9]{9,9}).*?/'

    Je n'ai pas encore étudié les regex en php.
    Toutefois

    '/([0-9]{9,9})/'


    doit être suffisante pour récupérer la 1ère occurence (vu qu'elle n'est pas ancrée)
    donc le moteur va chercher une chiffre suit d'une chiffre suit d'une chiffre......9fois
    si on a plusieurs (ce n'est pas son cas) alors il faut utiliser le modificateur /g de la regex (je ne sais pas s'il y a en PHP)

    Il y a quand même une piège
    si par exemple la chaîne contient
    $str = 'Le nombre 123456789123456789 possède 18 chiffres.';

    Ca sera peut être mieux d'utiliser un ancrage (mot, ou non chiffre)

    Et le test ne sera pas fiable vu qu'il veut vérifier si la chaîne contient 9 chiffres ni plus ni moins
    Je capture les 1ères 9 mais j'ai encore 9 qui reste

    et ailleurs je ne comprends pas pourquoi ça ne marche pas

    ^[0-9]{9}$

    {9} veut dire 9 occurences (kilian a raison)
    c'est un peu rédondant {9,9}

    il faut savoir exactement sur quelle chaîne tu traites la regex

    En Perl j'aurais écrit
    @occurence = $var =~ /\D\(d{9})\D/g;
    
    scalar(@occurence) == 0? print "rien\n"                  :
    scalar(@occurence) == 1? print "une occurence trouvée\n" :
                             print @occurence+0, " occurences trouvées\n";
    --
    lami20j

    P.S Je vais étudier les regex en PHP, c'est promis :-))
    2
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Voici:
    ^[0-9]{9}$ 

    Ca fonctionne pour une chaine composée exclusivement de 9 chiffres et rien d'autre.
    1
  3. Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   67
     
    Merci ça marche avec une petite correction :
    ^[0-9]{9,9}$


    Et si je veux récupérer ça dans une chaine plus complexe du style :
    Le nombre 123456789 possède 9 chiffres.

    Comment faire pour ne récupérer que 123456789 ?

    Merci d'avance.
    1
  4. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Avec preg_match :-)
    $str = 'Le nombre 123456789 possède 9 chiffres.';
    $matches = array();
    if(preg_match ('/.*?([0-9]{9,9}).*?/', $str, $matches)){
        echo 'Le nombre est '. $matches[1];
    }
    else{
        echo 'Pas de nombre trouvé';
    }

    J'ai pas testé mais ça doit être ça.
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Merci pour ces compléments interessants :-)
    1
  7. Dinheru Messages postés 1019 Date d'inscription   Statut Membre Dernière intervention   67
     
    Merci a vous deux pour vos réponses ça ma bien aidé !
    1