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 :

Contrôle d'un N° de téléphone [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Contrôle d'un N° de téléphone
    Bonjour à tous,

    Les Regex...trop hard pour mes 3 neurones...

    Je voudrais contrôler qu'un N° de portable ne comporte pas une suite de 8 chiffres identiques après le 06 ou 07.

    Par exemple :

    0611111111, ou 0777777777 ou 0699999999 = pas bon.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Quelque chose comme ça, valable pour toutes les combinaisons qui se répètent 6 fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $number  = '06111111';
    $pattern = '/^0(6|7)'.$number[2].'{6}$/';
    $test  = preg_match($pattern, $number);
    ?>

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    Je ne vois pas trop comment utiliser ton regex...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pattern = '/^0(6|7)'.$_POST['portable'][2].'{6}$/';
    $test  = preg_match($pattern, $_POST['portable']);
    Retourne 0 que le N° soit correct (0612589865) ou incorrect (0611111111).
    Je contrôle que le N° commence bien par 06 ou 07 et "mesure" 10 caractères avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!preg_match('#^0[6-7]([0-9]{2}){4}$#',$_POST['portable'])){
    $erreurs['portable'] = "Votre N° de portable n'est pas au bon format. <br /> 
    Il ne doit comporter que des chiffres (10 au maximum) et commencer par 06 ou 07";
    }
    Là où je galère c'est vraiment pour les 8 chiffres suivant 06/07 que je ne veux pas identiques...

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Faut pas pousser,
    J'ai mis 6 chiffres identiques au lieu de 8.
    Tu aurais pu corriger toi-même, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $number  = '0677777777';
    $pattern = '/^0(6|7)'.$number[2].'{8}$/';
    $test = preg_match($pattern, $number); // si $test = 1 -> nombre invalide : répétition
    echo $number, ':', preg_match($pattern, $number);
    echo "<br />";
    $number  = '0678425356';
    $pattern = '/^0(6|7)'.$number[2].'{8}$/';
    $test = preg_match($pattern, $number); // si $test = 0 -> nombre valide
    echo $number, ':', preg_match($pattern, $number);
    ?>

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Du calme !!!

    J'ai bien entendu testé avec 6,7 et 8 chiffres.
    Mais je n'ai pas compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '/^0(6|7)'.$number[2].'{6}$/';
    Pourquoi $number[2] ? C'est le premier chiffre après 06 ou 07 ?
    Donc il en resterait 7 derrière ?

    Toutes mes plates excuses : mon vieux cerveau intègre mal les regex.
    Je te remercie beaucoup de ta soluce, elle fonctionne parfaitement.
    Bonne journée.

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Qu'est ce que ça peut bien faire que les 8 chiffres du MSISDN soient identiques ? Il n'est pas invalide pour autant à en croire le RFC... Si c'est juste pour embêter l'utilisateur en lui disant " nan mets ton vrai numéro !" il mettra juste +33612345678 et tu sera pas plus avancé.

    La seule chose à faire c'est déterminer si le numéro est au format internationnal ou non, s'il est préfixé par le bon country code et s'il a le bon maxlentgh.

    Donc ça ressemble plus à ça selon moi une regexp pour valider un numéro de téléphone:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function validate_msisdn ($number, $ndc = '06|07', $max_length = 8, $cc = '') {
      if (strpos($cc, '+') === 0) $cc = "\\$cc";
      return (boolean)preg_match( "#^{$cc}({$ndc})\d{8}$#", trim($number) );
    }
     
    var_dump(validate_msisdn('0612345678'));
    var_dump(validate_msisdn('0712345678'));
     
    var_dump(validate_msisdn('061235678'));
    var_dump(validate_msisdn('07123457816949'));
     
    var_dump(validate_msisdn('hello ?'));
    var_dump(validate_msisdn('+33612345678', '6|7', 8, '+33'));
    Voir:
    http://en.wikipedia.org/wiki/MSISDN
    http://en.wikipedia.org/wiki/List_of..._calling_codes

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

Discussions similaires

  1. Contrôle saisie champs téléphone
    Par bsidy1 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/08/2015, 13h18
  2. Contrôle d'un numéro de téléphone
    Par Sassy dans le forum C
    Réponses: 9
    Dernier message: 21/05/2013, 08h18
  3. Contrôle de saisie numéro téléphone
    Par franco9 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 17/09/2012, 16h20
  4. [RegEx] Contrôle format téléphone international
    Par yveslens dans le forum Langage
    Réponses: 4
    Dernier message: 20/07/2007, 13h47

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