10

我需要验证表单上的输入。我希望输入是 1 到 19 位之间的数字。输入也可以从零开始。但是,我想验证它们并非全为零。我有一个正则表达式,可以确保输入是数字并且介于 1 到 19 个数字之间。

^\d[1,19]$

但我不知道如何检查整个字符串是否全为零。我试过这个

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

但它在 00000000000000000001 上失败,因为它允许可变数量的零。

如何检查整个字符串不为零?

谢谢。

我正在尝试在 ASP.NET RegularExpressionValidator 中执行此操作,因此我希望使用单个表达式。我还有其他选择,所以如果不能做到这一点,我也不会不走运。

4

4 回答 4

18

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

于 2009-02-06T17:29:53.280 回答
2

只需做一个负面的前瞻:

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

这在 Perl 中运行良好。

于 2009-02-06T17:35:52.550 回答
2

(?!0+$) 是一个前瞻指令。这 ?!是在字符串末尾搜索 1 个或多个 0 的负前瞻命令。如果匹配,则使用字符,留下 \d{1,19} 的常规数字搜索。

Boost Perl Regexp对 Boost 认可的 perl regexp 进行了很好的讨论。

于 2009-02-06T17:41:05.300 回答
0

你不需要 RegEx

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
于 2009-02-06T17:38:42.310 回答