我有一个正则表达式,我用它来验证.NET中的十进制数字。
当前正则表达式
[-+]?[0-9]*\.?[0-9]+
(编辑 - 我的问题是由于正则表达式[-+]?[0-9]*\.?[0-9]
:我最后错过了+
我正在使用的SQL数据库的数字定义为数字(28,12),所以我想我需要验证该范围内的任何内容,尽管业务逻辑强制执行0到9,999.99的值。
因此,虽然我使用我的验证输入的任何数据都适用于定义的业务规则,但我必须考虑数据库中已有的数据,因为它是由另一个系统提供的。
我需要验证所有这些数字:
.5
0.5
450.000000000000
.450
答案 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)
使其表现更好,因为引擎必须减少捕获工作。