正则表达式 - 检查十进制数(JavaScript)

10

我从stackoverflow获取了这个表达式 - /^\d+(\.\d{0,9})?$/

它可以处理以下内容:

2
23
23.
25.3
25.4334
0.44

但在 .23 上失败了。是否可以将其添加到上述表达式中,或者使用某种方法来处理它们所有?


你在意误报吗?如果不在意,那么在开头加上一个简单的 .? 就可以了。 - NorthGuard
你只需要将第一个“+”改为“*”。加号表示一个或多个,而星号表示零个或多个。这也不考虑数字前面可能有加号(+)或减号(-)的情况。那就是“[+-]?”或者如果它们在括号内具有特殊含义,则可能是“[+-]?”然后你还有“e+10”的东西。 - Mark Manning
3个回答

31

这段代码可以捕获你提出的所有情况,包括 .23

限制小数点后位数为9位

var isDecimal = string.match( /^(\d+\.?\d{0,9}|\.\d{1,9})$/ );

没有小数限制:

var isDecimal = string.match( /^(\d+\.?\d*|\.\d+)$/ );

将小数位限制为九位,就完美了。 - Sean Vieira
语法错误:无效的正则表达式:/^(\d+.?\d{0,9}|.\d{1,9}$/: 未终止的组。 - KooiInc
@Ben:是的,但它也无法捕获3.141592653589793238462643383279502884197169399375105820974;~) - KooiInc
@Ben - 你可能会发现\d+\.?\d{0,9}组非常消耗资源。如果输入以大量数字开头,则在决定哪些数字应该被\d+使用,哪些数字属于\d{0,9}时,可能会有很多回溯。 - Justin Morgan
它将匹配23.-1 /^(\d+\.?\d*|\.\d+)$/.test(2.-1) - KooiInc
显示剩余4条评论

2
这个覆盖了你所有的例子,允许负数,并强制实施九位小数限制:
/^[+-]?(?=.?\d)\d*(\.\d{0,9})?$/

现场演示:https://regexr.com/4chtk

分解一下:

[+-]?       # Optional plus/minus sign (drop this part if you don't want to allow negatives)
(?=.?\d)    # Must have at least one numeral (not an empty string or just `.`)
\d*         # Optional integer part of any length
(\.\d{0,9}) # Optional decimal part of up to 9 digits

由于小数点两侧都是可选的,(?=.?\d) 确保至少有一个数字存在。因此这个数字可以有整数部分、小数部分或者两者都有,但不能都没有。
需要注意的一点是,这个模式允许出现你例子中的 23.。个人认为这不是一个有效的数字,但这取决于你。如果你改变了对它的看法,那么模式将变得更简单 (演示):
/^[+-]?\d*\.?\d{1,9}$/

1

尝试这个表达式:

^\d*\.?\d*$


应该是^\d*.?\d+$ - Paulius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接