Necesidad de una expresión regular para que coincida con una cadena de longitud variable de los números que no pueden ser todos ceros

StackOverflow https://stackoverflow.com/questions/521242

Pregunta

necesito para validar una entrada en un formulario. Estoy esperando la entrada a ser un número entre 1 a 19 dígitos. La entrada también puede comenzar con ceros. Sin embargo, quiero validar que no son todos ceros. Tengo una expresión regular que se asegurará de que la entrada es numérico y entre 1 y 19 números.

^\d[1,19]$

Pero no puedo encontrar la manera de incluir una verificación de que toda la cadena no es todo ceros. He intentado esto

^(![0]{1,19})(\d[1,19])$

pero falla en 0000000000000000001 porque está permitiendo que un número variable de ceros.

¿Cómo verifico que toda la cadena no es ceros?

Gracias.

Estoy tratando de hacer esto en un RegularExpressionValidator ASP.NET así que estaba esperando para una sola expresión. Tengo otras opciones, así que no estoy de suerte si esto no se puede hacer.

¿Fue útil?

Solución

^(?!0+$)\d{1,19}$

Otros consejos

Sólo hacer una búsqueda negativa hacia delante:

(?!^0+$)(^\d{1,19})

Esto funciona bien en Perl.

(+ $ 0 ?!) es una directiva de búsqueda hacia delante. Los ?! es el orden negativa de búsqueda hacia delante para buscar 1 o más de 0 hasta el final de la cadena. Si esa es igual, a continuación, los caracteres se consumen, dejando a la búsqueda normal de dígitos \ d {1,19}.

alzar Perl Regexp tiene una buena discusión de expresión regular perl como se reconoce por Boost.

que no es necesario para que RegEx

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top