Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 19h16   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 21h55   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Bonjour,

Quelque chose comme ça, valable pour toutes les combinaisons qui se répètent 6 fois :
Code :
1
2
3
4
5
<?php
$number  = '06111111';
$pattern = '/^0(6|7)'.$number[2].'{6}$/';
$test  = preg_match($pattern, $number);
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 07h05   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour,

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

Code :
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 :
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...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 09h33   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Faut pas pousser,
J'ai mis 6 chiffres identiques au lieu de 8.
Tu aurais pu corriger toi-même, non ?
Code :
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);
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 09h54   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Du calme !!!

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

Code :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 14h52   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
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 :
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h40.


 
 
 
 
Partenaires

Hébergement Web