Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# - Problème de validation numéro de téléphone

via regex

Sujet résolu
    12 octobre 2022 à 9:40:28

    Bonjour à tous,

    voilà mon problème. Jai un programme en mode console où l'utilisateur doit rentrer plusieurs informations, dont son numéro de téléphone.

    Jai mis en place un système de contrôle/validation avec une regex. lu problème, lorsque je run le programme, arrivé au stade de l'entrée du numéro de téléphone, la validation ne se fait pas et du coup je reste bloqué à ce stade. La regex est correcte, je l'ai testé sur regex101.com et c'est correcte.

    voici le code :

    public class Club 
        {
            public string NumTelContact { get; set; }
        }
    
     public class TraitementClub
        {
            public static void CreerClub()
            {
                Intro.Titre();
                Intro.MenuClubNouveau();
                Console.ForegroundColor = ConsoleColor.DarkBlue;
                Console.WriteLine("Vous etes sur le point d'ajouter un nouveau club. Complètez les infos demandé");
    
                string rep = string.Empty;
                string cat = string.Empty;
                int cp;
                int tel;
    
                var donnees = new Club(Club.CompteurClub());
    
                donnees.DateCreation = DateTime.Now;
    
                ...
                do
                {
                    do
                    {
                        Console.WriteLine(ControleClub.VerifTel(donnees.NumTelContact).Item2);
                        Console.WriteLine("Entrez le numéro de téléphone de la personne de contact :");
                    } while (!int.TryParse(Console.ReadLine(), out tel));
                    donnees.NumTelContact = tel.ToString();
                } while (ControleClub.VerifTel(donnees.NumTelContact).Item1);
            }
        }

    et enfin la validation :

    public class ControlClub
    {
        public static Tuple<bool, string> VerifTel(string numTel)
            {
                if (string.IsNullOrEmpty(numTel) || string.IsNullOrWhiteSpace(numTel) || numTel == "")
                {
                    return new Tuple<bool, string>(true, string.Empty);
                }
                else if (Regex.IsMatch(numTel, @"^[0]{1}?[0-9]{9}$", RegexOptions.None, TimeSpan.FromMilliseconds(100)))
                {
                    return new Tuple<bool, string>(false, string.Empty);
                }
                else
                {
                    return new Tuple<bool, string>(true, "Ce numéro de téléphone n'est pas valide !!");
                }
            }
    }
        

    J'ai beau regarder partout, je ne trouve pas l'erreur du script de contrôle. Un regard extérieur est toujours interessant dans ce genre de problème.

    Merci.




    • Partager sur Facebook
    • Partager sur Twitter
      12 octobre 2022 à 10:46:03

      tu as vérifié la chaine que tu passais en paramètre ? 

      Je pense que vu que tu transformes ta chaine en entier, et qu'un numéro de téléphone commence assez souvent par un 0, ce zéro est perdu lors de la conversion en entier (ligne26), et quand tu la remets en chaine ligne 27, tu as perdu ce zéro, donc tu as une chaine de 9 chiffres sans 0 initial.

      Pourquoi tu n'utilises pas ta fonction de vérification dans le test du while ? 

      D'ailleurs, dans ta fonction de vérification, je ne trouve pas très logique de renvoyer true si le numéro n'est pas bon

      string tel="";
      do
      {
          Console.WriteLine(ControleClub.VerifTel(tel).Item2);
          Console.WriteLine("Entrez le numéro de téléphone de la personne de contact :");
          tel=Console.ReadLine();
      } while (!ControleClub.VerifTel(tel).Item1);
      
      public class ControlClub
      {
          public static Tuple<bool, string> VerifTel(string numTel)
              {
                  if (string.IsNullOrEmpty(numTel) || string.IsNullOrWhiteSpace(numTel) || numTel == "")
                  {
                      return new Tuple<bool, string>(false, string.Empty);
                  }
                  else if (Regex.IsMatch(numTel, @"^[0]{1}?[0-9]{9}$", RegexOptions.None, TimeSpan.FromMilliseconds(100)))
                  {
                      return new Tuple<bool, string>(true, string.Empty);
                  }
                  else
                  {
                      return new Tuple<bool, string>(false, "Ce numéro de téléphone n'est pas valide !!");
                  }
              }
      }



      -
      Edité par umfred 12 octobre 2022 à 10:46:30

      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2022 à 10:55:59

        Effectivement Umfred, c'est vrai que le Console.ReadLine() renvoie un string donc le '0' est pris en compte, mais après je transforme la saisie en int pour n'avoir que des chiffres et du coup le '0' disparait. Une erreur de débutant.

        Merci de m'avoir ouvert les yeux.

        Pour explication à ta question sur la vérification, si le numéro n'est pas valide, j'affiche un message signalant cette non validation, c'est pour ca que je passe par un contrôle externe, que j'utilise ailleurs dans le programme.

        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2022 à 12:43:12

          Comme tu dis, "n'est pas valide" pour moi ça veut dire False pas True :p (comme mis dans ma reprise de ta vérif)

          Pour moi, il me semble plus logique qu'une fonction VerifTel me renvoie un True si la vérification est bonne et false dans le cas contraire, ou la fonction devrait s'appeler IsNotVerifTel, et dans ce cas-là, on aura alors tendance à attendre True si la vérification n'est pas bonne et False si elle est bonne. C'est plus une question de lisibilité du code.

          • Partager sur Facebook
          • Partager sur Twitter

          C# - Problème de validation numéro de téléphone

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown