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
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}$
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.
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
.
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;
}
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.
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();
}
}
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.
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();
}
}
^\+?\(?[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
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.
Voici comment vous pouvez le faire succinctement à Kotlin:
fun String.isPhoneNumber() =
length in 4..10 && all { it.isDigit() }
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();
}