正则表达式匹配货币值(小数2位)但不是0

时间:2014-10-09 13:17:34

标签: regex

我想要匹配:

0.01
0.12
1.00
1.12
12.00
12.34

但不是:

0
0.00
.00
.12

获得不能为零的价格值。

我写了这个正则表达式: /(^\d{1,}\.\d{2}$)|(^\d{1,}$)/

但它匹配:

0
0.00

我想消除它。

我也尝试使用排除规则,例如^(?!0)(?!0\.00)\d{1,}\.\d{2}|\d+$,但没有成功。

3 个答案:

答案 0 :(得分:3)

您希望匹配一个带小数2位但不是0的值:

^(?![.0]*$)\d+\.\d{2}$

否定lookahead检查,如果该字符串不仅包含0.

\d+\.\d{2}确保所需的格式:One or more数字后跟.后跟2位数字。

Test at regex101.com(另见右侧解释)


要允许12.2将最后一部分更改为\.\d{1,2}并将其设为可选:

^(?![.0]*$)\d+(?:\.\d{1,2})?$

Test at regex101.com

答案 1 :(得分:1)

您可以尝试下面的正则表达式。

^(?!0(\.00)?$)\d+(?:\.\d{2})?$

DEMO

一开始的否定前瞻不允许00.00

答案 2 :(得分:1)

(?=.*?[1-9])(^\d+\.\d{2}$)|(?=.*?[1-9])(^\d{1,}$)

试试这个。刚刚添加(?=.*?[1-9])来否定0。请参阅演示。

http://regex101.com/r/yA1jY6/1