dragondz Posté 17 Juillet 2005 Partager Posté 17 Juillet 2005 Salut les ami(e)s, c'est la premùiere fois que je poste dans cette rubrique, je programme pas tres souvent en PHP, mais ca m'arrive Voila j'ai ecris un script qui fonctionne, mais je le trouve pas tres optimisé, alors je me demande s'il y a pas une meilleurs methode. Le but du script est de verifier qu'un numero de Tel (tapé par un utilisateur dans un formulaire) appartient bien a une plage de n° de Tel (plusieurs plages de n° en fait) Voila mon script : function numerotel($tel) { // Vérifie que le numero de telephone est bien dans la plage spécifiée $parti1 = substr($tel,0,3); if ($parti1<>"027" AND $parti1<>"046") { //echo $parti; return false; } $parti = substr($tel,0,5); if ($parti=="02772") { $tabl = range (1000,6999); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="02777") { $tabl = range (0000,9999); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="02773") { $tabl = range (0000,5999); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="02776") { $tabl = range (6000,9999); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="04642") { $tabl = range (1000,4299); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="04645") { $tabl = range (1000,3939); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="04645") { $tabl = range (9100,9599); if (in_array(substr($tel,5), $tabl)) { return true; } } if ($parti=="04641") { $tabl = range (1000,8999); if (in_array(substr($tel,5), $tabl)) { return true; } } return false; } J'explique mon code : tout les numeros commancent par "027" ou "046" , d'ou le premier test, le reste des tests verifient le reste du numero, Exemple de 2 plages : 027721000 à 027726999 027766000 à 027769999 Voila j'espere que j'ai bien expliqué, et Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarvinLeRouge Posté 17 Juillet 2005 Partager Posté 17 Juillet 2005 Salut, Tes tests ne semblent effectivement pas optimisés : 1) Tu testes d'abord les 3 premiers chiffres, afin d'éviter de tester les autres s'ils ne rentrent pas dans le champ de tes recherches. Ca, c'est bien. 2) Pour tes tests suivants, qui impliquent systématiquement les 5 premiers chiffres, il est inutile de les enchaîner ainsi, puisqu'ils sont mutuellement exclusifs : si un réussit, les autres échoueront forcément, il est donc inutile de les faire. Tu pourrais donc utiliser une structure en elseif ou (mais je ne sais plus si ça marche avec les chaînes de caractères) un switch pour traiter les différents cas sans faire de tests inutiles. 3) Puisque tu testes qu'une chaîne de caractères est bien d'une certanie forme, les expressions régulières seraient probablement une solution intéressante. Lien vers le commentaire Partager sur d’autres sites More sharing options...
dragondz Posté 18 Juillet 2005 Auteur Partager Posté 18 Juillet 2005 Salut Marvi, merci pour ta reponse, je repond a tes remarques : 2) Pour tes tests suivants, qui impliquent systématiquement les 5 premiers chiffres, il est inutile de les enchaîner ainsi, puisqu'ils sont mutuellement exclusifs : si un réussit, les autres échoueront forcément, il est donc inutile de les faire. Tu pourrais donc utiliser une structure en elseif ou (mais je ne sais plus si ça marche avec les chaînes de caractères) un switch pour traiter les différents cas sans faire de tests inutiles. Avec chaque if il y a un "retourn true" s'il est vériefié, donc il ne fait pas le reste les tests qui suivent, le seul cas ou il fait tout les tests c'est dans le cas où le numero est dans le dernier cas de test. je vais essayer le cas du switch 3) Puisque tu testes qu'une chaîne de caractères est bien d'une certanie forme, les expressions régulières seraient probablement une solution intéressante. Je vois pas comment? En tout cas tu comprend pourquoi je pose la question, il y a plusieurs façons de faire la meme chose en php, j'en ai trouvé une , mais il doit y en avoir d'autres meilleurs mais que je connait pas, alors des suggestions ou des pistes a étudier? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Black_Shade Posté 18 Juillet 2005 Partager Posté 18 Juillet 2005 Bonjour, Moi je conseillerai d'utiliser les regex (ou expression régulière) Le code serait moins lourd (max 10 lignes) Un site pour "apprendre" -> http://www.expreg.com/ ou http://www.siteduzero.com/php/regex1.php Lien vers le commentaire Partager sur d’autres sites More sharing options...
dragondz Posté 18 Juillet 2005 Auteur Partager Posté 18 Juillet 2005 Merci Black_Shade pour ces liens, effectivement j'ai jamais bossé avec les expressions régulières je vais etudier ca. Lien vers le commentaire Partager sur d’autres sites More sharing options...
dragondz Posté 18 Juillet 2005 Auteur Partager Posté 18 Juillet 2005 (modifié) Je viens de faire des tests avec le "switch" et ca marche, donc déja un script plus logique et plus efficace, Pour les expressions réguliére j'étudie encore la question pour voir comment l'appliquer dans mon cas, en tout cas je vous tiens au courant et Merci encore Voila la fonction modifié : function numerotel($tel) { // Vérifie que le numero de telephone est bien dans la plage spécifiée $parti1 = substr($tel,0,3); if ($parti1<>"027" AND $parti1<>"046") { return false; } $parti = substr($tel,0,5); switch ($parti) { case "02772": $tabl = range (1000,6999); if (in_array(substr($tel,5), $tabl)) { return true; } break; case "02777": $tabl = range (0000,9999); if (in_array(substr($tel,5), $tabl)) { return true; } break; case "02773": $tabl = range (0000,5999); if (in_array(substr($tel,5), $tabl)) { return true; } break; case "02776": $tabl = range (6000,9999); if (in_array(substr($tel,5), $tabl)) { return true; } break; case "04642": $tabl = range (1000,4299); if (in_array(substr($tel,5), $tabl)) { return true; } break; case "04645": $tabl = range (1000,3939); $tabl1 = range (9100,9599); if (in_array(substr($tel,5), $tabl) OR in_array(substr($tel,5), $tabl1)) { return true; } break; case "04641": $tabl = range (1000,8999); if (in_array(substr($tel,5), $tabl)) { return true; } } return false; } Modifié 18 Juillet 2005 par dragondz Lien vers le commentaire Partager sur d’autres sites More sharing options...
Black_Shade Posté 18 Juillet 2005 Partager Posté 18 Juillet 2005 Sur le siteduzero 2e partie des regex vers la fin je crois il y a un code tout fait Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant