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(); }
- Utilizar un signo de interrogación como String en android
- Cómo validar String usando expresión regular en java
- Identificar el tipo de patrón de regex
- Necesito una consulta SQL para encontrar todas las palabras que puede hacer con un conjunto de letras, incluyendo hasta dos fichas en blanco
- Cómo encontrar elementos por subcadena de ID usando la sintaxis del selector Jsoup?
- Expresión regular de Android: devuelve la cadena correspondiente
- Regex <img> Análisis de etiquetas con src, width, height
- Android / Java regex match Más signo
- ¿Qué hace (?! A) {0}? Significa en un regex de Java?
- Cómo ejecutar una consulta con regexp en Android
- Java Regex lookahead toma demasiado tiempo
- "Secuencia de escape no válida (válidos son \ b \ t \ n \ f \ r \" \ '\\) "error de sintaxis
- Validación de la fecha de Regex para aaaa-mm-dd
¿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.
- ¿Cómo mostrar el indicador de progreso o la barra de progreso en el titleBar en android?
- ¿Cómo pasar el adaptador de base de datos a otra actividad?