programacion - obtener numero de telefono android studio
Validación del número de teléfono Android (11)
¿Cómo verifico si un número de teléfono es válido o no? Tiene una longitud de hasta 13 (incluido el carácter +
en el frente).
¿Cómo puedo hacer eso?
Intenté esto:
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;
}`
Y también intenté esto:
public boolean isValidPhoneNumber(String number)
{
for (char c : number.toCharArray())
{
if (!VALID_CHARS.contains(c))
{
return false;
}
}
// All characters were valid
return true;
}
Ambos no están funcionando.
Tipo de entrada: + sign to be accepted and from 0-9 numbers and length b/w 10-13 and should not accept other characters
Dadas las reglas que especificó:
hasta la longitud 13 e incluye el carácter + frente.
(y también incorpora la longitud mínima de 10 en tu código)
Vas a querer una expresión regular que se vea así:
^/+[0-9]{10,13}$
Con las longitudes mínima y máxima codificadas en la expresión regular, puede eliminar esas condiciones de su bloque if()
.
Fuera de tema: Sugeriría que un rango de 10 a 13 sea demasiado limitado para un campo de número de teléfono internacional; es casi seguro que encuentre números válidos que son más largos y más cortos que esto. Sugeriría un rango de 8 a 20 para estar seguro.
[EDITAR] OP indica que la expresión regular anterior no funciona debido a la secuencia de escape. No estoy seguro por qué, pero una alternativa sería:
^[+][0-9]{10,13}$
[EDITAR 2] OP ahora agrega que el signo +
debe ser opcional. En este caso, la expresión regular necesita un signo de interrogación después de +
, por lo que el ejemplo anterior ahora se vería así:
^[+]?[0-9]{10,13}$
No debe usar expresiones regulares al validar números telefónicos. Echa un vistazo a esta API JSON - numverify.com - es gratis para un monólogo si llama por mes y es capaz de verificar cualquier número de teléfono. Además, cada solicitud viene con la ubicación, el tipo de línea y la información del operador.
Para validar los números de teléfono de una región específica en Android, use libPhoneNumber de Google y el siguiente código como ejemplo:
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;
}
Podemos usar patrones para validarlo.
android.util.Patterns.PHONE
public class GeneralUtils {
private static boolean isValidPhoneNumber(String phoneNumber) {
return !TextUtils.isEmpty(phoneNumber) && android.util.Patterns.PHONE.matcher(phoneNumber).matches();
}
}
Puede usar PhoneNumberUtils
si el formato de su teléfono es uno de los formatos descritos. Si ninguna de las funciones de utilidad coincide con sus necesidades, use expersiones regulares.
Puedes usar Patterns
incorporados de Android:
public boolean validCellPhone(String number)
{
return android.util.Patterns.PHONE.matcher(number).matches();
}
Este patrón está destinado a buscar elementos que parecen números de teléfono en texto arbitrario, no para validar si algo es, de hecho, un número de teléfono. Extrañará muchas cosas que son números telefónicos legítimos.
El patrón coincide con lo siguiente:
- Opcionalmente, un signo + seguido de inmediato por uno o más dígitos. Pueden seguir espacios, puntos o rayas.
- Opcionalmente, conjuntos de dígitos entre paréntesis, separados por espacios, puntos o guiones.
- Una cadena que comienza y termina con un dígito, que contiene dígitos, espacios, puntos y / o guiones.
Puedes usar esta library . Todo lo que necesita hacer es pasar el país y el número de teléfono que desea validar.
Utilice el método isGlobalPhoneNumber()
de PhoneNumberUtils
para detectar si un número es válido o no.
Ejemplo
System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
El resultado de la primera impresión es verdadero mientras que el resultado de la segunda es falso porque el segundo número de teléfono contiene f
.
también puedes verificar la validación del número de teléfono como
/**
* 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();
}
}
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-9]{1,3}/)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
Verifique sus casos aquí: https://regex101.com/r/DuYT9f/1