2010-09-09 77 views
1

我正在努力解决正则表达式问题。 要求是小数到2位,非零且不是负数。正则表达式帮助:十进制正数,2位

它的非零即是让我。

的内容,如0.01,0.99,99999999.99允许 然而负数和也为0,0.0或0.00不允许...

我想我得到的地方,但这样是不对的

^(?!(0)|(0\.0)|(0\.00))[+]?\d+(\.\d|\.\d[0-9])?$ 

它匹配的小数位,而正数正常,但我试图如果它发现0,0.0或0.00,但上述查找一个后缀,那不是正确的,因为它为0.1出错不匹配,0.01等

任何正则表达式exp在那里弹出?

+0

之间这取决于框架/库等。这是PHP,PERL,.NET,JAVA。 ..? – 2010-09-09 21:41:53

+0

对不起,这是用在.net正则表达式验证器 – Solyad 2010-09-09 22:03:31

回答

2

您所犯的错误是您并未锚定预见。您的正则表达式不允许以零开头的任何内容。试试这个:

^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$ 
        ^
       anchored 

您可以简化\.\d|\.\d[0-9]\.\d[0-9]?

我也不明白你为什么有时使用\ d和有时候[0-9]。始终如一。

+0

我使用\ d然后\ d [0-9]的原因是它在深夜很晚,我可怜的头炸了,我一直在玩正则表达式生成器太长;)。谢谢你的提示,明天早上我会努力工作 – Solyad 2010-09-09 22:02:17

+0

不错的,它的工作原理!这太妙了...!! – Solyad 2010-09-10 08:55:39

0
\+?(\d*[1-9]\d*.\d*|0?\.([1-9]\d*|0[1-9]\d*|00[1-9]\d*)) 
0

基于我对你的要求的理解,我比整个事情的正则表达式更好。

C#

public bool IsValid(string number) 
{ 
    return decimal.Parse(number) > 0 && Regex.IsMatch(number, @"\.\d{2}"); 
} 
0

如果我没有理解好你的需求,我会做到这一点:

/^\d+.(\d[1-9]|[1-9] 0)$/

此匹配任何数量的有小数部分0199

+0

如何4.00;)那也是有效的...... – Solyad 2010-09-10 08:48:41