数字验证 - JavaScript正则表达式

3
我想出了这个正则表达式来验证一个数字,它可以有最大长度-13(包括小数点),最大小数点数量-3,整数部分的最大长度-12。
^(\d{1,12}([.]\d{1,1})?|\d{1,11}([.]\d{1,2})?|\d{1,10}([.]\d{1,3})?)$

请问我的方法是否正确,或者有更好的解决方案吗?


1
你的正则表达式匹配了 123456789012.3总共有14个字符,但是你说过 "数字最大长度为13(包括小数点)"... 所以... 它有12个整数部分,但 .3 是额外的... - Roko C. Buljan
你可以有一个0数字的小数部分吗?也就是说,0.是有效的吗? - Tibrogargan
如果这是一个输入,您可以在标记中使用 type="number",而不是使用正则表达式来处理 :) - Frederik.L
抱歉,没有计算“.”。因此,排除小数点长度应为13,包括小数位。123456789012.3是可以的。 - techq
1个回答

3
这也可以起作用:
^(?=.{1,13}$)(\d{1,12})(\.\d{1,3})?$

使用正向前瞻匹配整个字符串长度是否正确。 接着使用一个组来匹配1-12位数字。 然后有一个可选的组来匹配一个小数点后跟着1-3位数字。
注:由于规则不允许13位整数部分,因此已进行简化编辑。

惊人而坚不可摧。 - Roko C. Buljan
1
@RokoC.Buljan 谢谢。如果你没有指出“没有13位整数部分”的问题,这就不会那么简单了。 - Tibrogargan
谢谢Tibrogargan。考虑到“.”,我猜应该是^(?=.{1,14}$)(\d{1,12})(.\d{1,3})?$。 - techq

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