严格十进制数的正则表达式

时间:2012-10-03 12:20:21

标签: regex

我想要一个正则表达式来验证DECIMAL数字:

有效的DECIMAL号码是:

+123
123
-123
+123.0000
+123,123.999
.0234
+1123,233,34

无效的DECIMAL号码是:

+1233+
-1233_
+12.233.33

是否有人可以提供帮助

5 个答案:

答案 0 :(得分:2)

这样更好:

^[+\-]?\d+(,\d{3})*(\.\d*)?$

加号或减号,可选地,后跟任意数量的数字,后跟可选的任意数量的,123部分,后跟可选的小数和更多数字,这将处理除了具有前导小数的数字之外的任何数字。

^[+\-]?(\d+(,\d{3})*(\.\d*)?|\.\d+)$

添加其他选项允许带有前导小数的数字,必须后跟数字。

答案 1 :(得分:1)

这适用于所有人:

+123
123
-123
+123.0000
+123,123.999
.0234
+1123,233,34

查看演示:

^[+\-]?(\d+(,?\d)*(\.\d*)?|\.\d+)$

<强> Regex Demo

答案 2 :(得分:1)

取决于您的正则表达式支持。

^([-+])?(\d+)?(\.\d+)?$

可选+或 - ,数字,可选','后跟更多数字。 不幸的是,还会匹配空字符串。

答案 3 :(得分:1)

我认为这是最简单的:

^[+-]?\d*\.?\d+$

小数点后总是需要数字。利用这一事实可以简化问题。

更新:起初我没有注意到你还需要处理逗号。这是一个简单的版本,允许逗号在小数点的左侧。每个逗号之前和之后必须至少有一个数字,但除此之外不强制执行任何规则(这似乎是示例数据的重点)。 实际上,在最后一个逗号后需要两位数。

^[+-]?(\d+(,\d)?)*\.?\d+$

答案 4 :(得分:0)

您可以使用此

^([-+] ?)?[0-9]+(,[0-9]+)?$