我正在努力解决正则表达式问题。 小数要求是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等
那里有任何正则表达式专家吗?
答案 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)$ /
这匹配01
和99