Cómo validar el formato de número de teléfono

Estoy a punto de crear una validación para el formato de número de teléfono .. El formato es de 10 dígitos, incluyendo el signo más, por ejemplo: +0133999504. A pesar de que he declarado el patrón que es tratar de rechazar el símbolo "-" o cualquier otro carácter, pero la validación no está funcionando. Cualquier otra idea o solución?

1st I declared the string regex: String PhoneNo; String PhoneNo_PATTERN ="[\\+]\\d{3}\\d{7}"; 2nd I make a if..else statement: { Pattern pattern = Pattern.compile(PhoneNo_PATTERN); Matcher matcher = pattern.matcher(PhoneNo); if (!matcher.matches()) { inputemergencyContactNo.setError("Please enter Emergency Contact No"); } else{ Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show(); } 

¿Por qué no eliminar todos los no-dígitos y luego contar los dígitos a la izquierda y poner el plus de nuevo en más tarde? Esto permite a los usuarios la libertad de llenar su número de teléfono de todos modos …

 String PhoneNo = "+123-456 7890"; String Regex = "[^\\d]"; String PhoneDigits = PhoneNo.replaceAll(Regex, ""); if (PhoneDigits.length()!=10) { // error message } else { PhoneNo = "+"; PhoneNo = PhoneNo.concat(PhoneDigits); // adding the plus sign // validation successful } 

Si su aplicación está destinada para uso internacional, reemplace

 if (!PhoneDigits.length()!=10) 

con

 if(PhoneDigits.length() < 6 || PhoneDigits.length() > 13) 

como sugirió Fatti Khan.


Para aplicar esto en el código que publicó en Android EditText Validation y Regex primero incluya este método en su clase pública o en la clase que contiene onClick ():

 public boolean validateNumber(String S) { String Regex = "[^\\d]"; String PhoneDigits = S.replaceAll(Regex, ""); return (PhoneDigits.length()!=10); } 

E incluya este método en la clase CreateNewRider:

 protected String tidyNumber(String S) { String Regex = "[^\\d]"; String PhoneDigits = S.replaceAll(Regex, ""); String Plus = "+"; return Plus.concat(PhoneDigits); } 

Aquí es donde ocurre la validación …

 @Override public void onClick(View view) { Boolean b = false; if(inputfullname.getText().toString().equals("")) b = true; else if(... // do this for all fields else if(inputmobileNo.getText().toString().equals("")) b=true; else if(inputemergencyContactNo.getText().toString().equals("")) b=true; else { if(validateNumber( inputmobileNo.getText().toString() ) Toast.makeText(RiderProfile.this, "Invalid mobile number", Toast.LENGTH_SHORT).show(); else if(validateNumber( inputemergencyContactNo.getText().toString() ) Toast.makeText(RiderProfile.this, "Invalid emergency contact number", Toast.LENGTH_SHORT).show(); else { // Validation succesful new CreateNewRider().execute(); } } if(b) Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show(); } 

A continuación, utilice tidyNumber () en la clase CreateNewRider:

  protected String doInBackground(String... args) { String fullname= inputfullname.getText().toString(); String IC= inputIC.getText().toString(); String mobileNo= tidyNumber( inputmobileNo.getText().toString() ); String emergencyContactName= inputemergencyContactName.getText().toString() ); String emergencyContactNo= tidyNumber( inputemergencyContactNo.getText().toString() ); ... 
 ^[\\+]\\d{3}\\d{7}$ 

Utilice anclas para limitar la coincidencia.

^ => inicio del partido

$ => fin del partido

Dadas las reglas que ha especificado:

hasta la longitud 13 e incluyendo el carácter + infront.

(e incorporando también la longitud mínima de 10 en su código)

Vas a querer un regex que se parezca a esto:

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

Con las longitudes min y max codificadas en el regex, puede eliminar esas condiciones de su bloque if ().

Off topic: Sugiero que un rango de 10 – 13 es demasiado limitante para un campo de número de teléfono internacional; usted está casi seguro de encontrar números válidos que son más largos y más cortos que esto. Yo sugeriría un rango de 8 – 20 para estar seguro.

[EDIT] OP indica que la regex anterior no funciona debido a la secuencia de escape. No sé por qué, pero una alternativa sería:

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

[EDIT 2] OP ahora añade que el signo + debe ser opcional. En este caso, el regex necesita un signo de interrogación después del +, por lo que el ejemplo anterior se vería así:

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

Para móviles válidos Es necesario tener en cuenta de 7 dígitos a 13 dígitos porque algunos países tienen un número móvil de 7 dígitos. También no podemos comprobar como el número móvil debe comenzar con 9 u 8 o algo.

Para el número de móvil he usado esta función

 private boolean isValidMobile(String phone2) { boolean check; if(phone2.length() < 6 || phone2.length() > 13) { check = false; txtPhone.setError("Not Valid Number"); } else { check = true; } return check; } 

usando esto para mi validación del número de teléfono y trabaja como encanto. Cubre la validación del teléfono y más que los desarrolladores querrían probar con un número de teléfono.

  • ¿Cuál sería una simple expresión regular para la comprobación de contraseña durante la suscripción?
  • Regex palabra entera
  • Cómo reemplazar una cadena si no está contenida entre '<' y '>'
  • Regex para eliminar espacios entre números solamente
  • Excluir etiquetas HTML y algunos caracteres UNICODE mientras busca en SQLite
  • Validar cadena con regex en android
  • Android java regex coinciden con todos menos un carácter
  • Regex para determinar las tarjetas de crédito en Android
  • Expresión regular en Android para el campo de contraseña
  • Android que convierte la cadena a la secuencia de la matriz
  • Regex no funciona en Android pero funciona bien en Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.