No sé qué tiene de malo mi código, todo lo que quiero es aceptar un número de teléfono móvil con este tipo de formato: 09xxxxxxxxx (siempre comienza en "09" y con un total de 11 dígitos). Todos los esfuerzos serán apreciados. Gracias por adelantado.

Aquí está la imagen del problema.

Estos son los códigos:

String a2= jTextField6.getText();
String a3 = jTextField7.getText();

Pattern p = Pattern.compile("^(09) \\d {9}$");
Matcher m = p.matcher(jTextField5.getText());

if (!m.matches()){         
     int b = JOptionPane.ERROR_MESSAGE;
     JOptionPane.showMessageDialog(this, "Invalid Mobile Number", "Error", b);    
     return;
}
if (null==a2||a2.trim().isEmpty()){
     int b = JOptionPane.ERROR_MESSAGE;
     JOptionPane.showMessageDialog(this, "Fields should not left blank", "Error", b);
     return;
} 
if(a3==null||a3.trim().isEmpty()){
     int b = JOptionPane.ERROR_MESSAGE;
     JOptionPane.showMessageDialog(this, "Fields should not left blank", "Error", b);  
}

else { 
    int c = JOptionPane.YES_NO_OPTION;
    int d = JOptionPane.showConfirmDialog(this, "Confirm Purchase?","Costume 1", c);
    if (d==0){
        JOptionPane.showMessageDialog( null,"Your costume will be delivered 3-5 working days." +"\n"+"\n"+"                   Thank You!");
    }
0
mark von 15 sep. 2018 a las 16:31

3 respuestas

La mejor respuesta

Debe eliminar los espacios en blanco en su expresión regular:

 Pattern p = Pattern.compile("^(09)\\d{9}$");

De lo contrario, serán considerados como personajes que deben estar presentes.

1
Loris Securo 15 sep. 2018 a las 13:40
    final String regex = "^09\\d{9}$";
    final String string = "09518390956"; //matcb
    //final String string = "11518390956"; // fails
    //final String string = "09518390956 "; // fails

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    while (matcher.find()) {
        System.out.println("Full match: " + matcher.group(0));
    }
0
Thomas Walsh 16 sep. 2018 a las 13:31

Use el modo de comentarios para ignorar los espacios en blanco en un patrón de expresiones regulares. Esto se puede hacer pasando el indicador Pattern.COMMENTS al compilar el patrón regex, o mediante la expresión de indicador incrustada (?x).

Ejemplo 1:

Pattern p = Pattern.compile("^(09) \\d {9}$", Pattern.COMMENTS);

Ejemplo 2:

Pattern p = Pattern.compile("(?x)^(09) \\d {9}$");
1
Patrick Parker 15 sep. 2018 a las 14:00