Utilitarios Java, lista de métodos, Regex y otras cosas.

por | agosto 30, 2013

Lista que se actualizará a medida que aparezcan aquellos métodos, regex, funciones, programación “rara”, que muchas veces usamos para resolver distintas problemas que se nos presentan en nuestro diario vivir.

Si tienen alguna sugerencia, pues bienvenida, en los comentarios me lo hacen saber y lo incorporo a la entrada.

1. Regex

Letras y números de 15 caractéres:

public static final String
REGEX_LETRAS_NUMEROS_SIZE_15 = "[a-zA-Z0-9]{15}";

Solo números de 3 dígitos y que no incluya el valor 000:

public static final String
REGEX_NUM_SIN_000="\\d{3}(?<!000)";

Números decimales 12 enteros y 2 decimales, incluye números enteros:

public static final String
REGEX_FORMATO_VALORES="^[0-9]{1,12}+(\\.[0-9]{2})?$";

Emails válidos:

public static final String
REGEX_MAIL="(\\w+([!#$%-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*)";

2. Limpiar Ceros

No pregunte porque pero el caso es que el valor a modificar es un String el cual contiene valores numéricos incluyendo decimales.

Antes Después
00435 435
0000039.20 435
00000005.65 5.65
00000.00 0.00
005060.01 5060.01

.

public static String limpiarCeros(final String valor) {
     return valor.replaceFirst("^(-)?0+(?=\\d)", "");
}

.

Fuente: http://stackoverflow.com/questions/10626332/use-regex-to-form-a-number-without-leading-zeros-in-javascript

.

4 pensamientos en “Utilitarios Java, lista de métodos, Regex y otras cosas.

  1. James

    Ahí esta, pusiste una expresión regular que no esta bien, por eso es que te fallan las aplicaciones que haces, esa expresión de correo no esta del todo bien, pongamos unos dos ejemplos de correos electrónicos que por lo general no son validos

    No voy a explicar mucho el porque pero un correo no empieza por www. y tu expresión lo permite
    http://www.prueba.correo@dominio.ec

    Aquí algo interesante y que puede ser tema de debate pero por lo general un dominio no tiene mas de cuatro letras y eso por los .info sin embargo se que es posible, en todo caso para mi este correo no vale, y otra ves tu expresión lo permite
    prueba.correo@dominio.dominio

    Ahora para que veas que soy pana y no solo vine a criticarte, te paso la expresión que por lo general yo uso y que al menos de momento ningún QA me a reportado incidencia

    MAIL_REGEX = “^[^www.]+\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$”;

    Bueno eso de momento las demás expresiones son simples, así que ni les revise.

    Ahora te dejo unas dos que uso a veces y suelo cambiar de acuerdo a la necesidad del sistema.

    Esta expresión valida la estructura de un password, lo típico mínimo mínimo, maximo N caracteres que incluya números y letras…., esta clarísima, si no le cachas me preguntas y te explico que exactamente valida.

    PASSWORD_REGEX = “(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,16})$”;

    Esta valida la fecha dd/MM/yyyy aunque advierto que no esta del todo completa sin embargo creo que cumple con lo mínimo
    DATE_REGEX = “^(0[1-9]|1\\d|2\\d|3[0-1])/(0[1-9]|1[0-2])/\\d{4}”;

    Por ahí tengo unas mas interesantes(largas) pero propias del negocio actual(Banca), si te pongo mínimo me dices y porque alguien quiere hacer algo así

    1. Alejandro Ayala Autor

      Mi expresión regular no permite el http:// revísalo: http://www.gskinner.com/RegExr/, un correo válido si que puede ser mailto:www.prueba.correo@solmedia.ec, envía un mail a esa dirección para que te asegures. 🙂
      Lo del dominio si es discutible, que nunca suceda mejor no hablar porque vos y yo hemos visto muchos casos variados.

      Se agradece las Regex, bastante simples y entendibles, es una herramienta muy poderosa sin lugar a dudas, ¿que no se puede hacer con las expresiones regulares?

      Saludos

  2. James

    Si son potentes pero deberia se posible validar precedencia de datos seria mas fácil si hubiera un if/else que no involucre javascript o cosas por el estilo, en PHP algo se puede hacer, sin embargo la expresión regular como tal no funciona así, el ejemplo de una fecha es claro, validar que si es mes dos solo tenga 28 días o 29 si es bisiesto, eso casi que no se puede, lo he echo por pura gana y es terriblemente engorroso aunque con grupos se lo logra y se puede hacer cosas mas interesantes pero es muy largo tengo algunas que he echo y que a veces pienso que hubiera sido mas fácil programarlo, sin embargo era necesario que sea una expresión para poder ponerla en BDD y cambiarla si es necesario, lo ideal es una mezcla de la validación por regex y por programación, pero todo depende del caso. Las expresiones regulares son potentes y fáciles pero a ratos esa facilidad se pone en tu contra

    1. Alejandro Ayala Autor

      Yo creo que cada cosa se hizo para algo específico y así deberíamos usarlas, llevarlas al extremo puede provocar problemas, sigo pensando y defendiendo que las cosas deben ser al estilo KISS, si algo se sale da las manos y se vuelve complejo de mantener es porque estamos haciendo cosas demasiado complejas para algo que requería una solución mucho mas sencilla. No siempre lo que se ve mas complejo es mejor, así si un Regex se ve demasiado compleja creo que sería hora de parar y replantear el uso de otra tecnología/método para llegar al objetivo.

      Saludos

Los comentarios están cerrados.