Regex 需要一个正则表达式来匹配可以';不要全是零

Regex 需要一个正则表达式来匹配可以';不要全是零,regex,validation,pcre,lookahead,negative-lookahead,Regex,Validation,Pcre,Lookahead,Negative Lookahead,我需要验证表单上的输入。我希望输入是一个介于1到19位之间的数字。输入也可以从零开始。但是,我想验证它们是否都是零。我有一个正则表达式,可以确保输入是数字,介于1到19个数字之间 ^\d[1,19]$ 但是我不知道如何包括检查整个字符串是否都是零。我试过这个 ^(![0]{1,19})(\d[1,19])$ 但它在0000000000000000001上失败,因为它允许可变数量的零 如何检查整个字符串是否为零 谢谢 我试图在ASP.NET RegularExpressionValidator

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

^\d[1,19]$
但是我不知道如何包括检查整个字符串是否都是零。我试过这个

^(![0]{1,19})(\d[1,19])$
但它在0000000000000000001上失败,因为它允许可变数量的零

如何检查整个字符串是否为零

谢谢


我试图在ASP.NET RegularExpressionValidator中实现这一点,所以我希望得到一个表达式。我有其他的选择,所以如果不能做到这一点,我不会走运。

^(?!0+$)\d{1,19}$
只需做一个负面展望:

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

这在Perl中运行良好。

您不需要正则表达式

            ulong test;
        string number = "1234567890123456789";
        if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0))
            Console.WriteLine(test);
ulong试验;
字符串编号=“1234567890123456789”;
如果(ulong.TryParse(编号,未测试)和&(测试<999999999999999 UL)和&(测试>0))
控制台写入线(测试);
(?!0+$)是一个先行指令。这个是用于搜索字符串结尾处的1个或多个0的负前瞻命令。如果匹配,则使用字符,保留\d{1,19}的常规数字搜索


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

我以前尝试过这个,但对于我给出的示例来说,它不起作用。不确定是什么原因?正如codelogic所说,这是一个消极的前瞻性断言。它说“只有在前面不是一堆跟在字符串末尾的零的情况下才匹配”。长相头是相当强大的魔法就这一点而言,看起来也落后了。这已经开始有意义了,但我仍然对这个问题感到困惑?在表达式中。前一个元素是什么?参考?@notrious2tall:查看此页面:。我相信他知道如何将其作为一般情况进行逻辑分析。他想做的是把它打包成RE,我们可以假设他有这样做的理由。是的,这是正确的。我可以在服务器端验证它,但我想用RegExValidator进行验证。部分是b/c我不想发帖,部分是b/c我想学习正则表达式。基本上是出于实际和自私的原因我不熟悉你的平台,但如果你的RegExValidator的设计者真的很聪明,他们可能已经做到了,这样你既可以在服务器端运行它,也可以将它呈现为客户端脚本,这是非常优化的(你也需要客户端脚本,但永远不要信任客户端)。你应该“考虑到”把它放在最开始的地方;你的方式会奏效,但这种方式更清楚地表达了你的意图。你需要在末尾加一个$,这样它就不能匹配数字后面的任何东西了。