Precisa de um regex para coincidir com uma cadeia de comprimento variável de números que não podem ser todos os zeros

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

Pergunta

Eu preciso para validar uma entrada em um formulário. Estou esperando a entrada para ser um número entre 1 a 19 dígitos. A entrada pode também começar com zeros. No entanto, quero validar que eles não são todos os zeros. Eu tenho um regex que irá garantir que a entrada é numérico e entre 1 e 19 números.

^\d[1,19]$

Mas eu não consigo descobrir como incluir um cheque que toda a cadeia não é todos os zeros. Eu tentei este

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

mas falha em 0000000000000000001 porque está permitindo que um número variável de zeros.

Como faço para verificar se toda a cadeia não é zeros?

Graças.

Eu estou tentando fazer isso em um RegularExpressionValidator ASP.NET então eu estava esperando por uma única expressão. Tenho outras opções, por isso não estou fora da sorte se isso não pode ser feito.

Foi útil?

Solução

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

Outras dicas

Basta fazer uma lookahead negativo:

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

Esta multa trabalha em Perl.

(?! 0 + $) é uma directiva lookahead. O ?! é o comando negativo antecipação de pesquisa para 1 ou mais 0 do até o fim da cadeia. Se ela se casar, em seguida, os personagens são consumidos, deixando a busca dígitos regular de \ d {1,19}.

impulsionar Perl Regexp tem uma boa discussão de perl regexp como reconhecido pelo Boost.

Você não precisa RegEx para isso

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top