Pattern matcher para formatear números de teléfono españoles

publicado por: Anonymous

Tengo una lista para números de teléfono móvil validados que debo mostrar de una misma manera:

El formato deseado es: +34 666 111 222

String telefonos = 
            "666444555,
             666-444-555,
             666 44 45 55,
             666-44-45-55,
             +34666555444,
             0034666555444";

Pattern pattern = Pattern.compile(""); // aqui es donde me clavo.
Matcher matcher = pattern.matcher(telefonos);

while (matcher.find())
    System.out.println(matcher.group());

Salida esperada:

+34 666 444 555
+34 666 444 555
+34 666 444 555
+34 666 444 555
+34 666 555 444
+34 666 555 444

solución

Prueba la siguiente expresión regular:

^(0034|+34)?(ddd)-? ?(dd)-? ?(d)-? ?(d)-? ?(dd)$

regex

Si planeas utilizar esta expresión de manera frecuente, es recomendable utilizar una constante para evitar recompilar la expresión cada vez, es decir:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("^(0034|\+34)?(\d\d\d)-? ?(\d\d)-? ?(\d)-? ?(\d)-? ?(\d\d)$", Pattern.MULTILINE);

public static void main(String[] args) {
    String input = "666444555n666-444-555n666 44 45 55n666-44-45-55n+34666555444n0034666555444";

    System.out.println(
        REGEX_PATTERN.matcher(input).replaceAll("+34 $2 $3$4 $5$6")
    );  
}

Salida:

+34 666 444 555
+34 666 444 555
+34 666 444 555
+34 666 444 555
+34 666 555 444
+34 666 555 444
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *