Expresión Regular para cualquier número mayor que 0?

La aplicación de la validación de un modelo en el MVC y quisiera hacerlo con Expresiones regulares.

Buscando para validar que un ID en mi modelo es mayor que 0 en enviar.

  • ¿Por qué tienen que ser una expresión regular? Eso es una mala herramienta a utilizar para este trabajo
  • Gareth, en algunos casos, google analytics permite utilizar sólo regex o coincidencia exacta 😉
InformationsquelleAutor Lando | 2012-01-27

14 Kommentare

  1. 132

    No sé cómo MVC es relevante, pero si tu ID es un número entero, este BRE debe hacer:

        ^[1-9][0-9]*$

    Si quieres para que coincida con los números reales (flota) en lugar de números enteros, que usted necesita para manejar el caso anterior, junto con la normal de números decimales (es decir, 2.5 o 3.3̅), casos en los que su patrón está entre 0 y 1 (es decir,0.25), así como en caso de que su patrón tiene una parte decimal que es 0. (es decir,2.0). Y mientras estamos en ello, vamos a añadir soporte para los ceros a la izquierda en números enteros (es decir,005):

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

    Tenga en cuenta que esta segunda es una extensión de la RE. La misma cosa puede ser expresado en Basic RE, pero casi todo lo entiende ERE en estos días. Vamos a romper la expresión en partes que son más fáciles de digerir.

        ^(

    El símbolo de intercalación coincide con el valor null al principio de la línea, por lo que antes de su regex con un símbolo de intercalación anclajes al principio de la línea. El paréntesis de apertura, debido a la o-bar, a continuación. Más sobre esto más adelante.

          0*[1-9][0-9]*(\.[0-9]+)?

    Coincide con cualquier número entero o cualquier número de punto flotante por encima de 1. Así que nuestro 2.0 sería igualado, pero 0.25 no. El 0* en el inicio maneja los ceros a la izquierda, por lo que 005 == 5.

                                  |

    El carácter de canalización es un «o-bar» en este contexto. Para efectos de la evaluación de esta expresión, Que tiene prioridad sobre todo lo demás, y efectivamente se une a las dos expresiones regulares juntos. Los paréntesis se utilizan para agrupar varias expresiones separadas por o barras.

    Y la segunda parte:

                                   0+\.[0-9]*[1-9][0-9]*

    Coincide con cualquier número que comience con uno o más 0 caracteres (reemplazar + con * que coincide con cero o más ceros, es decir,.25), seguido por un período, seguido por una cadena de dígitos que incluye al menos uno que no es un 0. Así que esto coincide con todo lo anterior 0 y a continuación 1.

                                                        )$

    Y por último, cerramos el paréntesis y el anclaje de la regex para el final de la línea con el signo del dólar, así como el símbolo de intercalación anclajes al principio de la línea.

    Por supuesto, si usted deja que su lenguaje de programación evaluar algo numéricamente en lugar de intentar coincidir con una expresión regular, usted va a ahorrar dolores de cabeza y de la CPU.

    • Hola. tema: Su validación 123asd, 123.12 kasdf
    • solucionado el problema. (Gracias, por cierto.) La RE ahora incluye encierra entre paréntesis, como la mayoría de los analizadores de aparecer a pesar de que el o-barra superior null anclajes.
    • hola ghoti, puedo permitir que coma en este modelo siguiente ^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$. como por ejemplo: 1000.00 es de 1.000.00 y 12324.56 es 12,324.56
    • El regex en mi respuesta (que copió en su comentario) no admite comas como separadores de miles. Usted podría coincidir con el patrón de una expresión regular si quería, pero yo sugeriría que estos comas no son realmente parte de la número, sino que forma parte de la presentación. Además, al escribir código para manejar los números, usted tendrá que tomar en cuenta la localización; en algunos lugares utilizan comas como la base del carácter y de los períodos como separadores de miles, o ninguno en absoluto. Este es un problema más grande de una expresión regular puede ayudar a resolver.
    • Hola, no es ni la validación de estos casos: 00, cualquier número negativo, cualquier número con indicación explícita de ser positivo (por ejemplo, +1), cualquier expresión sin una explícita números después del período (por ejemplo, 1.), y ni o casos como el de -.5, todos de los cuales son generalmente considerados válidos los números en C. cambiando Ligeramente la expresión regular de la cadena de ayuda en estos casos: ^\+*\-(0*[0-9][0-9]*(\.[0-9]+)?|0*+\.[0-9])$
    • así, el primer caso y negativa sería porque la pregunta anterior se mencionó que «cualquier número mayor que 0». 🙂 Para explícita positivo, sí, se podría añadir [+]? antes del paréntesis de apertura, pero el regex que te proponemos definitivamente no cumple con las necesidades expresadas en la pregunta.
    • sí, estás en lo correcto.

  2. 15

    Lo que acerca de esto: ^[1-9][0-9]*$

    • Usted no está pensando en números negativos.
    • y usted no está pensando en la pregunta: "Looking to validate that an ID on my model is greater than 0 on submit."
    • Sí, él está buscando a validar la entrada es mayor que 0 con esta expresión. Esto no validar que. Sólo se valida no es 0.
    • El uso de ASP.NET modelo MVC validadores. Es decir, si la expresión no coincide, la entrada no valida.
    • Ahora con su ^$ editar, de hecho, se hace el trabajo.
    • Ahh, ya veo lo que estaban diciendo. Creo que en ese momento yo estaba asumiendo que el usuario tendría que saber para envolver el regex en begin/end símbolos. Esto es mejor. Gracias 🙂
    • El regex estaba bien sin los anclajes. El ASP.NET RegularExpressionValidator siempre trata el regex como si estuviera anclado en ambos extremos.
    • «01» no es aceptado, pero «01» es distinto de cero
    • La respuesta puede ser fácilmente ajustado para tener en cuenta para los ceros a la izquierda, pero, personalmente, quiero suponer que es un formato de entrada o problema y no una intención de caso de uso.

  3. 3

    Creo que la mejor solución es agregar el signo + entre los dos soportes de expresión regex:

    ^[1-9]+[0-9]*$
    • ¿Qué tan seguro es de que esto no hace nada cerca de lo que el OP lo quería? Y por qué el menos eficiente [1-9]+[0-9]* en lugar de lo que es el aceptado la respuesta?
  4. 1

    hay que ir:

    MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");

    a presentar:

    if(myMatches.Count > 0)
    {
       //do whatever you want
    }
    • Que no coincide con el de 1024.
    • la respuesta ha sido corregido…
    • Usted no está pensando en números negativos.
    • leer op pregunta de nuevo. su MAYOR QUE 0
    • SU EXPRESIÓN regular debe asegurarse de que es mayor que 0 y NO LO HACE. Los números negativos NO son MAYORES QUE 0. Tal vez vas a entender mejor con un ejemplo: ¿qué sucede si el usuario introduce -156? Su expresión lo dice bien cuando definitivamente no se trata de ACEPTAR.
  5. 0

    Puede utilizar la siguiente expresión:

    (^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)                  

    Entradas válidas: 1 a 1. 1.1 1.0 todos los números reales positivos

    De entradas no válidas: todos los números reales negativos. y 0 0.0 y

  6. 0

    La respuesta es simple: ^[1-9][0-9]*$

    • ¿Cuál es el valor añadido a otras respuestas?
    • Yo simplemente buscar por mi trabajo urgente & ese momento que mi cabeza estaba casi vacío, entonces yo llegué a este post, pero cada respuesta de aquí es complicado, puede que para los de nivel superior la gente lo necesita. Pero necesito una solución simple, no compleja. Así, acabo de añadir que para alguien como yo puede conseguir ayuda.
    • Es exactamente la primera línea de la aceptó respuesta.
    • La primera respuesta es enorme, como un ensayo con algún párrafo. pero necesito un sencillo.
    • el punto de StackOverflow es ayudar a la gente a aprender, no sólo para proporcionar servicios de programación. Por dar una respuesta como esta, que la gente va a copiar y pegar en lugar de la aceptación de responder con sus explicaciones, en realidad puede que desalentar de aprendizaje.
  7. -2

    Creo que esto sería perfectamente de trabajo :

    ([1-9][0-9]*(\.[0-9]*[1-9])?|0\.[0-9]*[1-9])

    Válido:

     1
     1.2
     1.02
     0.1 
     0.02

    No válido :

    0
    01
    01.2
    1.10
    • Zota, el criterio en que la pregunta era para validar un número de «mayor que 0«. Mientras que libremente he de admitir que no soy un matemático, estoy bastante seguro de que todos los de su «no válido» resultados excepto el primero sería la de evaluar a mayor que cero.
    • Dime cuando fue la última vez cuando se utiliza el 0 delante de cualquier otro número, no cuentan 01 02 03 04… ni los 1.100 porque después de ceros son bastante innecesarios.. me obligó a mi cerebro para 2 horas para construir que regex para alguien que lo necesite como yo, y la validez se refiere a que regex SOLO.. Gracias por sus comentarios, incluso si se trataba de un troll uno..
    • LOL!!! «, Dicen, 1.10 es mayor que 0»«¡QUÉ! Apreté mi cerebro para 2hrs! Que troll!»

Kommentieren Sie den Artikel

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

Pruebas en línea