Expresión Regular para que coincida con un porcentaje con decimales?

Estoy tratando de construir una expresión regular (.NET) para que coincida con un porcentaje con 4 decimales. El 4 decimales son necesarios. La gama se parece a:

0.0001 to 100.0000 

Hasta ahora, me he encontrado con:

(?:[^0]+[1-100]{1,3})\.(?:\d{4})

Sin embargo, estoy un poco inseguro acerca de cómo agregar un par de otros requisitos para esta expresión. Necesito:

  • Sin ceros a la izquierda antes del punto decimal. 42.4214 está permitido, 042.4214 no lo es. 1.0000 está permitido, pero 001.0000 no lo es. Etc..
  • Hasta 3 caracteres permitidos antes de decimal sin ceros a la izquierda.
  • Si el número antes de la coma decimal es 100, no permitir que el número después de la coma decimal a ser algo distinto de 0000, así 100.0000 está permitido, pero 100.0135 no está permitido. (Esto es incluso posible con una expresión regular?)

Se agradece la ayuda!

InformationsquelleAutor rage8885 | 2012-08-27

3 Kommentare

  1. 6

    Sólo tratar los 100.0000 posibilidad como un caso aparte. Es fácil para que coincida con la (100\.0000), y es fácil para que coincida con el resto ([1-9]?\d\.\d{4}), así que con los dos como suplentes se obtiene:

    ^(100\.0000|[1-9]?\d\.\d{4})$

    (Suponiendo que usted quiere que sea la totalidad del texto, de lo contrario, deje el ^ y la $.

    • No coincide con 300.0000
    • y espero que no, la pregunta que define el rango de «de 0,0001 a 100,0000».
    • Perfecto, gracias! No sé por qué nunca he considerado el 100.0000 como un caso separado.
    • Bueno, ahí está el Teddybot-Efecto (ver home.ccil.org/~cowan/teddybot para la resolución de los problemas de la maravilla que es teddybot). Sobre todo porque según los programadores siempre estamos tratando de hacer las cosas no es un caso especial, tanto como sea posible, usted probablemente ha estado mirando por edades, así que lo que me llamó la atención y Daniel como obvio que iba a mantener a pasar. Dormir en ella y ver de nuevo podría haber sido igual de bueno, si no tan rápido como pidiendo.
    • Mi error, lo siento 🙂
  2. 2

    Me gustaría hacer algo como esto:

    ^((([0-9]|[1-9]\d)\.\d{4})|100\.0000)$

    Prueba

    • No coincide con 0.1234
    • Ya ha sido corregido.
    • No coincide con 300.0000
    • También perfecto, ojalá pudiera marcar dos respuestas como correctas. Esto sin duda ayuda a mi entender, un poco, aunque viendo hacer de dos maneras diferentes. Gracias!
    • Bueno, ese fue uno de los requisitos…
    • OK, me perdí el requisito.

  3. 1

    Ver en la acción:

    ^(0|[1-9]\d?)\.\d{4}|100\.0000$

    Partidos:

    0.0001
    100.0000
    42.4214
    1.0000

    No coinciden con:

    100.0135
    042.4214
    001.0000
    000.0000
    1000.0000
    2000.0000
    300.0000
    • ¿Por qué te quieren para que coincida con 300? el rango es de 0.0001 a 100,0000
    • Se ve bien, excepto el rango es de 0.0001 a 100,0000 como otros han mencionado. Agradezco el enlace para que regex tester, mucho mejor que el improvisado C# app que he escrito. Yo casi que desee establecer esta cosa como mi página de inicio.
    • Me olvidé de la gama. Fijo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea