Validation du numéros de telephone

Fermé
mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 - Modifié le 30 nov. 2020 à 01:17
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 30 nov. 2020 à 09:26
bonjour,

j'ai déclaré un tableau de type int qui va conserver le numero de tephone


  int[] numFournisseur = new int[100];



j'ai cette fonction pour valider le numéro de téléphone saisi mais le problème c que il accepte que 10 caractère si je dépasse le parsInt pente.
car j'ai déclarer une variable de type chaine de caractère récupère la saisi elle la vérifie si c correcte je v lui faire le cast en int pour la mettre dans le tableau

    public static boolean validerNumeroTelphone(String num) {
        boolean validerNum = false;
        String regexp = "^[0-9]{3}(-| )[0-9]{3}(-| )[0-9]{4}$";
        if (num.matches(regexp)) {
            validerNum = true;
        }

        return validerNum;
    }




comment régler ce problème svp?

Merci
A voir également:

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 nov. 2020 à 08:22
Bonjour

Merci à Chris d'avoir rendu ton code lisible.
Pour tes prochains post, merci de lire attentivement ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Concernant ton problème.

si je dépasse le parsInt pente.
tu n'as pas montré comment tu essayes de parser.


j'ai cette fonction pour valider le numéro de téléphone saisi

Cette fonction utilise une regex, c'est un outil qui permet de vérifier si un texte correspond à un format, ou à trouver dans un texte un morceau qui correspond à un format.

Dans ton cas, le format est 3 chiffres, puis un espace ou un tiret, puis 3 chiffres, puis un espace ou un tiret, puis 4 chiffres.
Voir quelques exemples ici https://regex101.com/r/VN0zYn/1, ce qui est coloré dans "test string" correspond au format.


Si tu rentres 123-456-789 (qui est accepté) directement dans un parseInt, il y'a effectivement des chances que ça plante.



0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 nov. 2020 à 08:24
PS pour les exemples, jai enlever un caractère au début et un à la fin, car ils servent à dire que le texte entier doit correspondre.
Hors pour te montrer, je voulais qu'on puisse trouver les morceaux du texte qui vont bien
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 nov. 2020 à 08:33
Bonjour,

Dans ta regex tu acceptes les espaces et les tirets, il faudra les retirer avant de faire la conversion en int.

Toutefois la conversion en int est une mauvaise idée, d'une part car si le numéro commence par un ou plusieurs zéros ils seront ignorés, d'autre part car la valeur maximale d'un int est 2'147'483'647.
Au final il n'y a donc que les numéros de téléphones qui commencent par 1 qui seront correctement stockés avec un int, tous les autres seront faux.

Pour stocker un numéro de téléphone, le String est nettement mieux qu'un int, ce qui ne t'empêche pas de quand même vérifier son format avec la regex.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
30 nov. 2020 à 09:26
Hello, ha oui, j’ai pas pensé à la valeur max du int.
Bien vu
0