javascript - 正则表达式验证最多小数点后4位
PHPz
PHPz 2017-04-10 16:18:53
[JavaScript讨论组]

验证数字,最多精确到小数点后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
PHPz
PHPz

学习是最好的投资!

全部回复(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})||$)/
这样可以匹配整数,四位小数。

ringa_lee

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

PHP中文网
var yourValue=10.1123;
/^\d+(\.\d{1,4})?$/.test(String(yourValue))
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号