js实现数字金额千分位逗号分开格式化

const formatter = (num) => {
    const reg = /^\d*$/
    if(!reg.test(num)){
        throw '输入内容有误!请输入数字'
    }else{
        return String(num).replace(/\d{1,3}(?=(\d{3})+(\.|$))/g,'$&,')
    }
}

var str = formatter(1234567)

console.log('str', str)

答案是有了,诸位有木有思考过这个正则的意义呢?

科普一下:

1、正则表达式 - 语法

2、正则表达式 - 元字符

3、JavaScript replace() 方法

上述正则表达式分析:

\d{1, 3} 

\d :代表匹配数字字符串

{1, 3} : 代表1 - 3位字符串

/d{1, 3} : 代表匹配到字符串为1-3位的,比如 : '123', '12345', 'w123'

 ?=

这个规则就高级那么点点了,查文档你会发现它的定义是:正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

+  匹配一次或者多次

\.  这里是匹配小数点,因为前面加了转义字符(\)

或者

$ 匹配输入字符串的结束位置

$&  与 regexp 相匹配的子串

再将正则可视化一下吧! 网站 正则可视化

 

最后用自己的话理解:

\d{1, 3} 匹配1-3位的数字,但是后面必须还得接着 “多个以三位数字为一组”的字符串,以数字三位数字结尾或者小数点结尾,匹配成功了,就在匹配到的字符串后面加上逗号。

 

各位道友意觉如何呀,欢迎指导!

 

参考:

JS实现千分位

【笔记】数字千分位格式化问题之正则表达式

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值