Foros del Web » Programación para mayores de 30 ;) » Java »

Expresiones regulares en JAVA

Estas en el tema de Expresiones regulares en JAVA en el foro de Java en Foros del Web. Hola gente!. una duda, como puedo crear una regla con expresiones regulares para que me acepte los siguientes valores (8:cualquier numero)? 8.88 8. .88 88 ...
  #1 (permalink)  
Antiguo 06/11/2010, 12:16
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 15 años
Puntos: 43
Expresiones regulares en JAVA

Hola gente!.
una duda, como puedo crear una regla con expresiones regulares para que me acepte los siguientes valores (8:cualquier numero)?

8.88
8.
.88
88

Es para validar numeros solo con 2 decimales. Si ingreso solamente punto(.) me debe rechazar, este es mi avance:

Código JAVA:
Ver original
  1. [0-9]{0,}.{0,1}[0-9]{0,2}

Gracias.
  #2 (permalink)  
Antiguo 07/11/2010, 15:05
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Expresiones regulares en JAVA

\\d*\\.\\d{2}

Un punto y dos valores decimales, precedido o no de parte entera.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 07/11/2010, 17:06
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 15 años
Puntos: 43
Respuesta: Expresiones regulares en JAVA

Gracias por responder, pero tu expreg no me acepta estos numeros:

8. Debe ser correcto
.88 Debe ser correcto
88 Debe ser correcto
. Incorrecto

Si ingreso solamente punto(.) me debe rechazar

Código JAVA:
Ver original
  1. public boolean validaDecimal(String id){
  2. boolean valido=true;
  3.             Pattern pc = Pattern.compile("\\d*\\.\\d{2}");
  4.             Matcher m = pc.matcher(id);
  5.             valido = m.matches();
  6.            
  7.             return valido;
  8.        
  9.     }
  #4 (permalink)  
Antiguo 07/11/2010, 18:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Expresiones regulares en JAVA

¿Te das cuenta que lo que pides es muy retorcido? En una misma regex hacer que los tres términos (decimal, separador y entero) sean opcionales, es un error, ya que para que un valor sea válido depende de que haya otros valores o no , y para eso es más legible separar las condiciones.

Si lo único que quieres es saber si se puede convertir a double, ¿por qué no usas un Double.parseDouble() dentro de un try/catch?

Si sigues empeñado en hacer una sola regex

http://www.regular-expressions.info/conditional.html
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 07/11/2010, 19:33
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 15 años
Puntos: 43
Respuesta: Expresiones regulares en JAVA

el parseDouble parece una solución, pero como puedo restringir para que el double solo me permita 2 decimales?

Gracias Xerelo y a los visitantes, no vuelvo a moletar.
  #6 (permalink)  
Antiguo 08/11/2010, 03:00
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Expresiones regulares en JAVA

Dependiendo de para lo que lo necesites podrás solucionarlo de una forma u otra , pero como solución genérica, puedes hacer un matches("\\d*\\.\\d{3,}") después del parseDouble, el que lo cumpla tiene más de 2 decimales.

Edito:

http://www.regular-expressions.info/conditional.html no es válido, java creo que no admite condiciones en las regex.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Última edición por Xerelo; 08/11/2010 a las 04:31

Etiquetas: expresiones, regulares
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:31.