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
-
22-08-2019 - |
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.
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);