Foros del Web » Programando para Internet » Javascript »

Expresion Regular para decimales

Estas en el tema de Expresion Regular para decimales en el foro de Javascript en Foros del Web. Mi problema es que la siente expresion todavia tiene errores, por ejemplo al poner . me valida, al poner enter me valida, al poner 1. ...
  #1 (permalink)  
Antiguo 25/11/2007, 21:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Expresion Regular para decimales

Mi problema es que la siente expresion todavia tiene errores, por ejemplo al poner . me valida, al poner enter me valida, al poner 1. me valida. Quiero que acepte:
1.1
111111
.111
0.111

que no acepte:
.
(solo enter)
1.

encontre algo que me podia ayudar que iba x(?=y), pero la explicacion no era muy buena.

Código:
<script language="javascript" type="text/javascript">
            function Valida(form) {
                var er1_EntradaS = /^[0-9]*\.?[0-9]*$/
                if(!er1_EntradaS.test(form.EntradaS.value)) {
                alert("El contenido de \""+form.EntradaS.value+"\" no es un real");
                return false;
                }
            }
         </script>
por el signo no me importa, gracias a todos
  #2 (permalink)  
Antiguo 26/11/2007, 06:03
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresion Regular para decimales

Creo que esto debería funcionar...

^[0-9]+(\.[0-9]+)?$

Es decir:

1 o más números, seguidos o no por un punto y uno o más números

En el caso de enteros, el paréntesis no entra en juego. En el caso de números con punto, requiere que sea seguido por 1 o más números (esa es la diferencia entre + y *, * permite que haya cero ocurrencias)


Saludos.
  #3 (permalink)  
Antiguo 26/11/2007, 08:59
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Expresion Regular para decimales

Hola razpeitia y alvlin:

En realidad si quiere que también se acepte .111 habría que poner
^[0-9]*(\.[0-9]+)?$


x(?=y) es una asercion predictiva (lookahead assertion) que sólo capturará x si está seguido de y, pero no captura y. Javascript soporta también las negativas x(?!y), pero no soporta las lookbehind, ni las positive x(?<=y) ni las negative x(?<!y).

Te pongo un ejemplo de x(?=y):
Código:
var re = /^casa (?=a)[a-z]+$/;
var pruebas = ["casa amparo", "casa alvaro", "casa andres", "casa pepe", "casa paco", "casa rodrigo"];

for(var i in pruebas) {
	document.write( pruebas[i]+" --> "+re.test(pruebas[i]) +"<br/>");
}
Sin embargo, hay que tener en cuenta que cuando ponemos /^casa (?=a)[a-z]+$/, ese [a-z]+ es el culpable de detectar todo lo que está detrás del espacio en blanco, incluida la a del lookahead, ya que como he dicho antes, no se captura.

Otro ejemplo que funcionaría inesperadamente si no supiéramos esto:
Código:
var re = /^casa (?=a)rr/;
var pruebas = ["casa arroz", "casa arra", "casa arrue", "casa arrp", "casa paco", "casa rodrigo"];

for(var i in pruebas) {
	document.write( pruebas[i]+" --> "+re.test(pruebas[i]) +"<br/>");
}
Lo que imprimirá será:
Cita:
casa arroz --> false
casa arra --> false
casa arrue --> false
casa arrp --> false
casa paco --> false
casa rodrigo --> false
Habría que cambiar la expresión regular a
Código:
/^casa (?=a)arr/;
Si quisiéramos que encajara con los 4 primeros elementos del array.

Como ves, normalmente es útil para casos en los que x tiene que ir seguido de y, y no nos importe nada más detrás de y.


Es una pena que los lookbehind no estén soportados por javascript, ya podrían ponerlos en las versiones nuevas, aunque de ello no sé nada.




Espero que hayas sacado algo en claro de este post

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 26/11/2007, 14:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Re: Expresion Regular para decimales

Gracias, derkenuke creo que nesecito practicar un poquito mas n.n, unq no entiendo muy bien x(?=y) quedara practicar un poco mas para perfecionarlo, por que la verdad se ve muy util.

PD: Gracias a ti tambien alvlin
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 12:32.