Hai bisogno di una regex per abbinare una stringa di lunghezza variabile di numeri che non possono essere tutti zeri

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

Domanda

Ho bisogno di convalidare un ingresso di un modulo. Mi aspetto l'ingresso di essere un numero compreso tra 1 e 19 cifre. L'ingresso può anche iniziare con zeri. Tuttavia, voglio verificare che essi non sono tutti zeri. Ho un'espressione regolare che farà in modo che l'ingresso è numerico e tra 1 e 19 numeri.

^\d[1,19]$

Ma io non riesco a capire come inserire un controllo che l'intera stringa non è tutti zeri. Ho provato questo

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

, ma non riesce a 0000000000000000001 perché è permettere un numero variabile di zeri.

Come faccio a verificare che l'intera stringa non è zeri?

Grazie.

che sto cercando di fare questo in un ASP.NET RegularExpressionValidator quindi speravo in una singola espressione. Ho altre opzioni, quindi non sono fuori di fortuna se questo non può essere fatto.

È stato utile?

Soluzione

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

Altri suggerimenti

Basta fare una lookahead negativo:

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

Questo funziona bene in Perl.

(?! 0 + $) è una direttiva lookahead. Il ?! è il comando negativo lookahead per la ricerca di 1 o più 0 di alla fine della stringa. Se questo corrisponde, quindi i personaggi sono consumati, lasciando la ricerca normale cifra del \ d {1,19}.

Boost Perl Regexp ha una buona discussione di perl regexp come riconosciuto da Boost.

non è necessario RegEx per questo

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top