Нужно регулярное выражение, чтобы соответствовать строке чисел переменной длины, которые не могут быть все нули - PullRequest
9 голосов
/ 06 февраля 2009

Мне нужно подтвердить ввод в форме. Я ожидаю, что ввод будет числом от 1 до 19 цифр. Ввод также может начинаться с нуля. Тем не менее, я хочу подтвердить, что они не все нули. У меня есть регулярное выражение, которое будет гарантировать, что ввод числовой и от 1 до 19 чисел.

^\d[1,19]$

Но я не могу понять, как включить проверку, что вся строка - это не все нули. Я попробовал это

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

, но он не работает на 0000000000000000001, потому что он допускает переменное число нулей.

Как проверить, что вся строка НЕ ​​является нулями?

Спасибо.

Я пытаюсь сделать это в ASP.NET RegularExpressionValidator, поэтому я надеялся на одно выражение. У меня есть другие варианты, так что мне не повезет, если это невозможно.

Ответы [ 4 ]

18 голосов
/ 06 февраля 2009

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

2 голосов
/ 06 февраля 2009

(?! 0 + $) - это директива прогнозирования. ?! является отрицательной командой lookahead для поиска 1 или более нулей до конца строки. Если это соответствует, то символы используются, оставляя обычный поиск цифр \ d {1,19}.

Boost Perl Regexp содержит хорошее обсуждение регулярных выражений Perl, которое распознает Boost.

2 голосов
/ 06 февраля 2009

Просто сделайте негативный взгляд:

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

Это прекрасно работает в Perl.

0 голосов
/ 06 февраля 2009

для этого вам не нужен RegEx

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
...