web-dev-qa-db-fra.com

Validation du numéro de téléphone Android

Comment vérifier si un numéro de téléphone est valide ou non? Il est jusqu'à la longueur 13 (y compris le caractère + devant).

Comment je fais ça?

J'ai essayé ceci:

String regexStr = "^[0-9]$";

String number=entered_number.getText().toString();  

if(entered_number.getText().toString().length()<10 || number.length()>13 || number.matches(regexStr)==false  ) {
    Toast.makeText(MyDialog.this,"Please enter "+"\n"+" valid phone number",Toast.LENGTH_SHORT).show();
    // am_checked=0;
}`

Et j'ai aussi essayé ceci:

public boolean isValidPhoneNumber(String number)
{
     for (char c : number.toCharArray())
     {
         if (!VALID_CHARS.contains(c))
         {
            return false;
         }
     }
     // All characters were valid
     return true;
}

Les deux ne fonctionnent pas.

Type d'entrée: + sign to be accepted and from 0-9 numbers and length b/w 10-13 and should not accept other characters

43
Udaykiran

Compte tenu des règles que vous avez spécifiées:

jusqu'à la longueur 13 et y compris le caractère + en avant.

(et intégrant également la longueur minimale de 10 dans votre code)

Vous allez vouloir une regex qui ressemble à ceci:

^\+[0-9]{10,13}$

Avec les longueurs min et max codées dans l'expression régulière, vous pouvez supprimer ces conditions de votre bloc if().

Hors sujet: je suggérerais qu'une plage de 10 à 13 est trop limitative pour un champ de numéro de téléphone international; vous êtes presque certain de trouver des nombres valides plus longs et plus courts que cela. Je suggérerais une plage de 8 à 20 pour être sûr.

[EDIT] OP indique que la regex ci-dessus ne fonctionne pas en raison de la séquence d'échappement. Je ne sais pas pourquoi, mais une alternative serait:

^[+][0-9]{10,13}$

[EDIT 2] OP ajoute maintenant que le signe + devrait être facultatif. Dans ce cas, l'expression rationnelle a besoin d'un point d'interrogation après le +, ainsi l'exemple ci-dessus ressemblerait à ceci:

^[+]?[0-9]{10,13}$
32
Spudley

Utilisez la méthode isGlobalPhoneNumber() de PhoneNumberUtils pour détecter si un numéro est un numéro de téléphone valide ou non.

Exemple

System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));

Le résultat de la première instruction d'impression est vrai alors que le résultat de seconde est faux car le deuxième numéro de téléphone contient f.

102
Sunil Kumar Sahoo

Pour valider les numéros de téléphone d'une région spécifique sous Android, utilisez libPhoneNumber de Google et le code suivant à titre d'exemple:

public boolean isPhoneNumberValid(String phoneNumber, String countryCode)
{
    //NOTE: This should probably be a member variable.
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

    try 
    {
        PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
        return phoneUtil.isValidNumber(numberProto);
    } 
    catch (NumberParseException e) 
    {
        System.err.println("NumberParseException was thrown: " + e.toString());
    }

    return false;
}
20
DiscDev

Vous pouvez utiliser Android Patterns

public boolean validCellPhone(String number)
{
    return Android.util.Patterns.PHONE.matcher(number).matches();
}

Ce modèle est destiné à la recherche de choses qui leur ressemblent peuvent être des numéros de téléphone en texte arbitraire, pas pour valider si quelque chose est en fait un numéro de téléphone. Il va manquer beaucoup de choses qui sont numéros de téléphone légitimes.

Le modèle correspond à ce qui suit:

  • Facultativement, un signe + suivi immédiatement par un ou plusieurs chiffres . Des espaces, des points ou des tirets peuvent suivre.
  • Facultatif, jeux de chiffres en parenthèses, séparées par des espaces, des points ou des tirets.
  • Une chaîne commençant par et se terminant par un chiffre contenant des chiffres, des espaces, des points et/ou tirets.
19
RazaHameed

vous pouvez également vérifier la validation du numéro de téléphone

     /**
     * Validation of Phone Number
     */
    public final static boolean isValidPhoneNumber(CharSequence target) {
        if (target == null || target.length() < 6 || target.length() > 13) {
            return false;
        } else {
            return Android.util.Patterns.PHONE.matcher(target).matches();
        }

    }
7
TejaDroid

Vous pouvez utiliser PhoneNumberUtils si le format de votre téléphone est l’un des formats décrits. Si aucune fonction de l’utilitaire ne correspond à vos besoins, utilisez des experssions régulières.

5
inazaruk

Nous pouvons utiliser un modèle pour le valider. 

Android.util.Patterns.PHONE

public class GeneralUtils {

    private static boolean isValidPhoneNumber(String phoneNumber) {
        return !TextUtils.isEmpty(phoneNumber) && Android.util.Patterns.PHONE.matcher(phoneNumber).matches();
    }

}
3
LLIAJLbHOu
^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

Vérifiez vos cas ici: https://regex101.com/r/DuYT9f/1

1
Maxim Firsoff

Vous pouvez utiliser cette bibliothèque . Il vous suffit de passer le pays et le numéro de téléphone que vous souhaitez valider.

1
Nosakhare Belvi

Voici comment vous pouvez le faire succinctement à Kotlin:

fun String.isPhoneNumber() =
            length in 4..10 && all { it.isDigit() }
0
Gulzar Bhat
 String validNumber = "^[+]?[0-9]{8,15}$";

            if (number.matches(validNumber)) {
                Uri call = Uri.parse("tel:" + number);
                Intent intent = new Intent(Intent.ACTION_DIAL, call);
                if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);
                }
                return;
            } else {
                Toast.makeText(EditorActivity.this, "no phone number available", Toast.LENGTH_SHORT).show();
            }
0
Csaba