Problema con una regex (expresión regular)

erdanblo

Número real de 0 a 10, que puede contener 0, 1 o 2 decimales.

Estoy usando:
/\d{0,2}+([.]\d{0,3})?$/;

Y distintas combinaciones, pero no me sale :S

Es para JS.

Fr4nk0

Creo que con esa expresion estas diciendo que los 2 digitos aparezcan 1 o más veces (con el +)
Prueba a quitarle el más a ver si asi funciona. (Para el punto, escapalo con la barra \ ).
Prueba algo como:
/[0-9]{0,2}(.[0-9]{0,3})?/ (No se si en javascript los intervalos de numeros son con el - o con el punto . Sino pues pon como pusiste antes \d.

bLaKnI

No, esto #2 no es correcto:

/[0-9]{0,2}(.[0-9]{0,3})?/

Piensa que puedes hacer por ejemplo, 99.X.
La X no importa, pero 99 segun #1 no debe poder hacerse, pues es de 0-10.
Y los decimales son 0, 1 o 2 decimales. Con {0,3}, podrian ser 3 decimales.

Asi que yo haria:

0|1|2|3|4|5|6|7|8|9|10?

Esto es cualquier numero del 1 al 10, y pueden o no haber decimales mediante ?.
Si los hay, el punto debe existir y pueden haber 1 o 2 (maximo 2). No hace falta poner 0, porque no quieres que haya algo como "10.", por lo tanto solo habrá 1 o 2 decimales cuando los haya.
El 0 deicmales, ya se controla con el ?.

Ya pensaré una forma mejor de hacer lo del 1 al 10.

edit:
el problema es que se puede hacer 10.99, por ejemplo. Luego si no se incluye el 10 en los OR, habria que hacer algo como:

(0|1|2|3|4|5|6|7|8|9?)|10

erdanblo

/[0-9]{0,2}(.[0-9]{0,3})?/

/[0-9] es lo mismo que \d me imagino.

/\d{1}([.]\d{1,3})?$/;

Un número decimal (un dígito) y ahora opcionalmente "(", el carácter "." y otros decimales (uno, o dos, o tres) opcionales "?"

No me funciona :P

#3 El tuyo tp me va, no se si será ya cosa del resto del script :S

"var regexNota = /0|1|2|3|4|5|6|7|8|9|10(.\d{1,2})?$/;"

He probado como ves a cambiarle el [ por ( ya que en otra regex que hago una cosa similar me funciona así) y el [0-9] por \d

bLaKnI

Quita los /^ y los $ del final.
Deja limpia la sentencia.

Por cierto,
http://java.sun.com/docs/books/tutorial/essential/regex/pre_char_classes.html

a mi me va genial. Mira el índice a la izquierda.

Aps y otra cosa, si usas la regex no como un pattern, sino como una string que luego se la pasas a una funcion de regex, haz siempre doble barra!

Por ejemplo, para poner un punto, y no la classe "cualquier cosa", haz esto

regex = "\."

edit:

cierto es que [] es por defecto OR.
Luego tiene que ser ().
(0|1|2|...)

erdanblo

Si le quito eso no funciona :P, es Javascript,

por cierto, da un poco igual con que salga 10.99 xDDD, el caso es que no lo saco, con lo chorra que es.

ZaO

Prueba esa a mi me va de lujo:

/[0-9]+(,[0-9]{1,3})?$/;

erdanblo

Bueno al final me ha andado esta:

/\d{1,2}([.]\d{1,3})?$/;

Pero antes no me iba, pero corregí otra cosilla que tenia abajo y ya anda.

Aunque no sea perfecto no os quiero quitar más tiempo. Gracias ;)

bLaKnI

Pero esque tanto con esto:

/[0-9]+

como con eso:

/\d{1,2}

Puedes crear numeros mas grandes que 10!

Con el primero, puedes hacer facilmente 55, o 93, o 32, o 8453, o 283773... Numero larguisimos.
Y con el segundo, 35, 67, 82, 99... numeros de 2 cifras pero mas grandes que 10!

De hecho, habria que pensar como evitar que la expresion te tomara como válido un numero que empieze por 0, por ejemplo, 0432...

Por eso sigo insistiendo con la mia:

/^(((0|1|2|3|4|5|6|7|8|9)(.[0-9]{1,2})?)|10)$/;

ZaO

mm creo que es para una nota y asin puedes poner 11,99, puedes probar con esta:

/10|[0-9](,[0-9]{1,2})?$/;

erdanblo

The winner is #10 xDDD

Ya es más de lo que lo que ando haciendo se merece.

Muchas gracias de nuevo a ambos.

ZaO

#11 tiene un fallo, si pones 10,xx o 10,x te lo coge asin que lo pones asin y solucionado:

/10|0-9?$/;

bLaKnI

Coño claro!
xD

[0-9] xDDD
Y yo poniendo todos los ORs xD Y encima me lo he dicho a mi mismo antes. [] es OR. xDDD
Vaya despiste :P
(0|1|2|3|4|...|9) = [0-9] xDD

Usuarios habituales

  • bLaKnI
  • ZaO
  • erdanblo
  • Fr4nk0