正则表达式帮助:正十进制,2个位置

时间:2010-09-09 21:39:21

标签: regex

我正在努力解决正则表达式问题。 小数要求是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等

那里有任何正则表达式专家吗?

4 个答案:

答案 0 :(得分:2)

您所犯的错误是您没有锚定前瞻。你的正则表达式不允许任何以零开头的东西。试试这个:

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

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

我也不明白为什么你有时会使用\ d而有时候[0-9]。保持一致。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据我对你的要求的理解,我比整个事情的正则表达更喜欢这个。

<强> C#

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

答案 3 :(得分:0)

如果我理解你的需求,我会这样做:

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

这匹配0199

之间具有小数部分的任何数字