[Python] Fonction qui renvoie vrai ou faux si une chaîne de caractères quelconque est un numéro de téléphone valide

a marqué ce sujet comme résolu.

@Reymond c’est là que python est super ( par rapport au c++ que j’apprend actuellement qui est une tanass!!)

sur google il y auras très souvent une réponse claire à tes problèmes

Tout est *objet en python donc si tu prend ta chaîne de caractère ( qui est donc un *objet ) tu lui applique une méthode qui est déjà *instancier et elle te rendra un grand service ex:

"1".isdigit()
//True

"1.5".isdigit()
//False

"1,5".isdigit()
//False

"3b".isdigit()
//False

" ".isdigit()
//False

source : https://python.doctor/page-builtin-built-in-fonctions-internes-python

*objet : Tu ne la certaine pas vu mais je pense qu’il a du t’en parler. Je te le dit avec mes mots au lieu de copier une définition bateau ( mais va chercher la définition quand même :lol: ). Chaque variable que tu écris, se crée selon un modèle déjà écrie dans ton compilateur ( ces modèles sont dans des librairies qui s’importe la plupart du temps sans rien faire ) du coup quand tu ecris

ma_variable = "blabla" //ce sera un objet de la classe `str`
ma_variable2 = 15 // sera un objet de la classe des `int`

*instencier : quand tu crée ta variable elle est instancier d’une classe aura toutes les caractéristiques et méthode de celle ci : (’str' ou 'int' en fonction de comment tu l’instancie). 'input' par exemple renvoie toujours un objet de classe 'str' mais si tu peux le convertir si cela ne te convient pas. :) .

Du coup sa te rend bien service tu va pourvoir contrôler facilement une bonne partie boulot est déjà fait :-°

+0 -0

C’est la à mon sens qu’il va falloir faire des choix dans la façon de traiter ton problème. Soit tu garde les points le espaces le +33 pour faire tes test et ça peu devenir compliquer. Soit tu formate ta chaîne comme tu le veux ( moi en l’occurrence je fait le ménage avant)

je te donne un exemple, le +33 me gêne :

variable = "+331.89.33.85.66" # numero de telephone que j'ai recuperer
if "+33" in variable: # si mon numero comptient le fameux +33
    newvariable = "0" + variable[3:] # je cree un nouvelle variable en suprimant le debut et en mettant un zero pour commencer
    if "+33" in newvariable: # je fait une derniere verif pour qu'il n'y est pas d'autre +33 qui traine si oui nom numero sera non valide 
        print("false")# dans ton cas ce ne seras pas un print mais un return 
print(newvariable)

execute ce code dans ton ide tu vera le resultat

Ensuite il ne reste plus que les points à sortir un autre petit exemple j’aurais aimer te le mettre en cacher pour que tu cherche un peu mais je sais pas faire.

 
variable = "+331.89.33.85.66" # toujours mon numéro
if "." in variable:# je contrôle s'il y a des points 
   new_variable = variable.split(".") # ce coup si je découpe ma chaîne en une liste et mon delimiteur sera le point celui-ci ne sera pas copier
   new_variable = "".join(new_variable)# on transforme ma liste sans les points en chaîne de caractère et le tour et joué 
elif " " in variable:# idem pour les espaces 
   new_variable = variable.split(" ")
   new_variable = "".join(new_variable)

print(new_variable)

maintenant tu n’a plus de point, de +33, et plus d’espace peut tester sans problème s’il y a un caractère ou non dans ton numéros.

Je n’ai fait que utiliser les chaînes et leurs méthode et des listes chose normalement que tu as vu, mais si tu un souci avec ce que j’ai écris demande plus d’information.

Je pense que avec ça tu devrais pourvoir nous montrer quelque chose même bugger mais logiquement tu as tout.

+0 -0

Sachant que le in n’est pas la bonne opération pour vérifier que la chaîne débute par '+33'.

Et que pour les espaces / points, tu ne vérifies pas s’ils sont placés correctement (et replace serait mieux que split + join).

@entwanne +1 pour replace() effectivement plus jolie (n’apprenant que par mes propres moyen cela ne m’est pas arrivé à l’esprit ) :honte:

En revanche je conteste formellement ta critique du in mon ide ne se plains pas, ça fonctionne comme je m’y attends ! tu ne serais pas plus python que python lui même ? :p

Plus sérieusement, je souhaiterais que tu développe parce que je ne vois pas le problème

Tu dit que je ne vérifie pas si les points sont correctement positionnés, c’est vrais mais la question de @Reymond était (si j’ai bien compris) :

En faites, je bloque pour la traduction "Si oui alors vérifier que ce numéro contient des lettres. ".

Vous m’avez proposé des choses mais aucun n’est expliqué.

Merci d’avance de votre aide.

Reymond

Donc je lui propose une solution pour utiliser .isdigit() une fois débarrassé du +, des espaces et des points si la méthode renvoi False c’est qu’il y a baleine sous cailloux.

maintenant s’il fallait contrôler les points ou espaces j’aurais fait quelque chose dans ce genre:

for i,j in enumerate(variable):
    if j == " " or j == "."and (i+1) %3 != 0:
        print(False)

la encore je ne teste pas si ma chaîne a la bonne taille la condition marcherais avec un numéro de taille infini.

En reconstituant le puzzle avec tout les éléments qui ont était donné on dois pouvoir faire un script potable

+0 -0

Plus sérieusement, je souhaiterais que tu développe parce que je ne vois pas le problème

Marycha

Imaginons, au hasard, que tu reçoives comme chaîne 'xy+331234567', numéro invalide, donc.

Tu commences par tester "+33" in variable, ça renvoie True (il y a bien un +33 dans la chaîne). Donc tu assignes newvariable = "0" + variable[3:], soit '0331234567'.

Tu testes s’il y a un autre +33 dans la chaîne, non, tout est bon. Le numéro '0331234567' est valide. Parce que tu as perdu des informations en cours de route (disparition de 'xy+').

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte