正则表达式验证最多小数点后4位

验证数字,最多精确到小数点后4位

var regNum=/^\d+(\.\d{1,4})$/;

但是
下面两次的结果不同,求教

reg.test(100.)

true

reg.test('100.')

false

------------------------------------------分割线----------------------------------------------

不好意思 各位,我这个正则是在网上找的,这个正则好像必须要有小数,后来我自己改了一下,加 了一个?匹配符号
应该是这样:var regNum=/^\d+(\.\d{1,4})?$/;

regNum.test(100.)

true

regNum.test('100.')

false
阅读 21.6k
4 个回答

答案有更新
来吧,洒家来解释一下

你最后写出的这个正则是没问题的:/^\d+(\.\d{1,4})?$/
当然,前提是你的题意为:验证数字,最多精确到小数点后4位
那么既然这样,暂且忽略小数点前的数字是多少,也忽略小数点后每个位置上的数字是几,那答案只有这5种:
8
8.8
8.88
8.888
8.8888

既然是正则匹配,那么所有需要进行匹配的对象,都将会被转成字符串。
所以满足上面那段正则的就是这5种:
"8"
"8.8"
"8.88"
"8.888"
"8.8888"

看到这里没问题吧?
那么接下来我解释一下题主给出的第一个测试:

reg.test(100.)

首先你要知道一件事,100.它既然没有写上引号,它就是Number类型的,所以它的值其实是100
就好比.2等同于0.2一样
那么既然这一点解释通了,你测试的结果也就解释通了。上面这个测试语句可以完全等同于:

reg.test(100)

这里100会被转成"100"然后再去进行正则匹配
这满足于我上面提到的"8"这个结构,所以匹配结果是true

那么接下来解释一下你的第二个测试:

regNum.test('100.')

既然这里是'100.',是一个字符串,它并不不属于上面我列出的5种之一,所以当然是false啦~


不好意思,字快码完了突然被叫去开会。。
希望可以帮到你 XD


测试了一下,你的两个应该都返回false的。如果是验证数字,可为小数的话,你的好像必须带小数点。
/^\d+(\.\d{1,4})||$)/
这样可以匹配整数,四位小数。

没加引号的话就是个number,写100、100.、100.0都一样的,转换为字符串都是100,当然能过

var yourValue=10.1123;
/^\d+(\.\d{1,4})?$/.test(String(yourValue))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题