“可选符号,可选数字,可选点,一个或多个数字”的数字正则表达式

时间:2011-08-04 20:45:20

标签: regex

我有一个正则表达式,我用它来验证.NET中的十进制数字。

当前正则表达式

 [-+]?[0-9]*\.?[0-9]+

(编辑 - 我的问题是由于正则表达式[-+]?[0-9]*\.?[0-9]:我最后错过了+

我正在使用的SQL数据库的数字定义为数字(28,12),所以我想我需要验证该范围内的任何内容,尽管业务逻辑强制执行0到9,999.99的值。

因此,虽然我使用我的验证输入的任何数据都适用于定义的业务规则,但我必须考虑数据库中已有的数据,因为它是由另一个系统提供的。

我需要验证所有这些数字:

.5
0.5
450.000000000000  
.450  

5 个答案:

答案 0 :(得分:2)

你现在拥有它的正则表达式应该可以正常工作。以下是正则表达式各部分的演练:

[-+]?   # matches '-' or '+', optional
[0-9]*  # matches zero or more digits, as many as possible
\.?     # matches a '.', optional
[0-9]+  # matches one or more digits, as many as possible

对于“.5”,前两个部分缺失,但这不会使比赛失败。不知道你为什么遇到麻烦,但可能是.NET代码,发布它,我们可以尝试帮助。

您可能想尝试在第一个字符类([\-+])中转义“ - ”,这不应该是必要的,因为“ - ”是第一个字符,但是当“ - ”在字符类通常指定范围。

答案 1 :(得分:1)

[-+]?[0-9]*\.?[0-9]+

使用“。”逃避问题。

答案 2 :(得分:1)

http://www.regular-expressions.info/floatingpoint.html

[-+]?[0-9]*\.?[0-9]*

实际上,pyroscope在最后使用了+而不是*

答案 3 :(得分:1)

正则表达式看起来很好,但之后的处理(DB或其他)可能不接受这种格式。

答案 4 :(得分:1)

使用\d表示数字。这考虑了没有前导数字的十进制数字。

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

此外,非捕获组(?:regex)使其表现更好,因为引擎必须减少捕获工作。