2009-09-14 54 views
6

¿Hay una expresión regular que valide un valor porcentual a 2 decimales?¿Cómo validar un porcentaje de dos decimales con un Regex?

tengo una expresión regular por dos cifras decimales, pero no sé cómo parar los valores por encima de 100, por ejemplo, 100.01 está validado con mi expresión regular.

+1

FWIW - analice la imagen en un flotante/doble en el idioma que esté utilizando y valide '0 <= x <= 100'. Una expresión regular no es el martillo correcto para este clavo en mi humilde opinión. –

+0

Cuando dije "imagen", quise decir "porcentaje". Lo siento. –

+0

Estoy usando una expresión regular de datannotation para aplicar la validación en una aplicación de mvc. – littlechris

Respuesta

9

En Perl:

/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1, ? 2})) $/

o simplemente puede añadir un extra si la comparación exactamente 100 :)

+1

Bien hecho. Funciona con mis casos de prueba ... http://regexhero.net/tester/?id=6807190b-cc82-4dd4-8864-05ce8c0c3b4f –

+0

Parece que funciona en el enlace proporcionado, pero puede hacer que funcione en mi aplicación . ASP.Net MVC vlaidation utilizando la anotación de datos: [RegularExpression (@ "/ (^ 100 ([.] 0 {1,2})?) $ | (^ \ D {1,2} ([.] \ D {1,2})?) $/")] – littlechris

+0

Puede refactorizar esto para una mejor eficacia. Las dos partes antes y después de | comparte un prefijo inicial y un sufijo, e incluye^y $. Al hacer comunes las partes comunes, se reduce la cantidad de retroceso necesario cuando una pieza no coincide. – MSalters

0

prueba este:

\d{1,2}\.\d{2} 

Eso le da un dígito de un dígito o dos número seguido por exacto dos lugares decimales. Si desea permitir así décimas (ala 10.1), entonces intente esto:

\d{1,2}\.\d{1,2} 
+0

Siempre he odiado al 100%. ;) –

+1

Esa solución pierde el valor '100' o '100.00'. –

+0

Durr, seguí leyendo que el OP NO quería 100.00. Bueno, tal vez en otro momento ... –

0

/^(?:100(?:.0(?:0)?)?|\d{1,2} (:?. \ d {1,2})) $/

trabaja con:?

  • 100,0
  • 100,00
  • 99,99
  • 0,01

etc.

0

Prueba este (acepta cualquier cosa entre 0 y 100 incluyendo 0,00 & 100.00:

^(100\.00|100\.0|100)|([0-9]{1,2}){0,1}(\.[0-9]{1,2}){0,1}$ 
1

Esto permite que todos los porcentajes excepto cero.

^[1-9]{1}[0-9]?(?:\.\d{1,2})?$|^0\.\d{1,2}?$|100 
+0

Debe agregar^100 $ en lugar de los 100 al final de su expresión, de lo contrario, cualquier elemento que contenga 100 se considerará válido, p. 100s.23 – Fjut

Cuestiones relacionadas