6 votes

Comment valider un numéro de téléphone pour qu'il ne permette pas tous les mêmes chiffres comme 9999999999999 ou 11111111111 en java ?

Comment valider un numéro de téléphone pour qu'il n'autorise pas tous les mêmes chiffres comme 99999999999 ou 11111111111 en JAVA

Merci Sunny Mate

15voto

TheBlastOne Points 2247

Si c'est possible, j'essaierais de discréditer cette exigence pour qu'elle soit rejetée.

Peu importe ce que vous mettez dans vos contrôles de plausibilité, un utilisateur qui essaie d'éviter les champs obligatoires en y entrant des déchets va toujours réussir. Vous finissez soit par avoir des éléments de données inutiles plus "intelligents" et plus difficiles à détecter, soit par avoir un contrôle de plausibilité qui ne laisse pas passer toutes les données du monde réel dans le système. De la merde à l'entrée, de la merde à la sortie. Construisez un bouclier de merde, et vos utilisateurs créeront des fascies que vous n'auriez jamais imaginées.

Il n'y a aucun moyen de programmer pour contourner cela (sauf pour des choses simples qui sont généralement des fautes de frappe involontaires, saisies par erreur, etc.)

9voto

Bart Kiers Points 79069

La regex suivante :

^(\d)(?!\1+$)\d{10}$

correspond à des chaînes de 11 chiffres qui n'ont pas tous les mêmes chiffres.

Une démo :

public class Main {
    public static void main(String[] args) throws Exception {
        String[] tests = {
                "11111111111",
                "99999999999",
                "99999999998",
                "12345678900"
        };
        for(String t : tests) {
            System.out.println(t+" :: "+t.matches("(\\d)(?!\\1+$)\\d{10}"));
        }
    }
}

qui produit :

11111111111 :: false
99999999999 :: false
99999999998 :: true
12345678900 :: true

5voto

aioobe Points 158466

Ce code fait correspondre des numéros avec au moins 4 numéros répétés. (Vous pourriez modifier le 3 dans l'expression régulière pour augmenter ce seuil).

Pattern sameDigits = Pattern.compile("(\\d)(\\1){3,}");

for (String num : new String[] {
        "11111",  // matches
        "1234",   // does not match
        "8584",   // does not match
        "999",    // does not match (too few repetitions)
        "9999"})  // matches

    if (sameDigits.matcher(num).matches())
        System.out.println("Same digits: " + num);
    else
        System.out.println("Not same digits: " + num);

Imprimés

Same digits: 11111
Not same digits: 1234
Not same digits: 8584
Not same digits: 999
Same digits: 9999

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X