数字每隔三位加个逗号的js正则表达式写法
这里有三种写法,如下:
function formatterNum(num) {
//return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
//return (num || 0).toString().replace(/(\d{1,3})(?=(?:\d{3})+)/g, '$1,');
return (num || 0).toString().replace(/(?!^)(\d{3})(?=(?:\d{3})*$)/g, ',$1');
}
正则表达式的学习网站:http://blog.csdn.net/zaifendou/article/details/5746988
经过学习,发现以上写法只能针对正整数。
下面有两种写法,可以处理包括整数,小数和负数,其中小数部分不做处理。
//整数 如 -123456 会变成 -123,456
//小数 如 -123456.00000 会变成 -123,456.000000
第一种:
formatterNum(num) {
return (num || 0).toString().replace(/(?!^)(?<!-)(?<!\.\d*)(\d{3})(?=(\d{3})*(\.\d+)?$)/g, ',$1');
}
第二种:
FormatNum(num) {
var numVal = num || 0;
var beforeNum = numVal.toString().split(".")[0];//获取小数点之前的数字
var afterNum = numVal.toString().split(".")[1];//获取小数点之后的数字
var beforeStr = beforeNum.replace(/(?!^)(?<!-)(\d{3})(?=(?:\d{3})*$)/g, ',$1');
var wholeStr = beforeStr;
if (afterNum) {
wholeStr = beforeStr + "." + afterNum;
}
return wholeStr;
}
后面发现一种更好的正则来处理,能处理包括小数,整数,负数方面的数值,小数部分也会做处理
FormatNum(num) {
return (num || 0).toString().replace(/\B(?=(\d{3})+\b)/g, ',');
}
在线验证:http://regex.zjmainstay.cn/r/0eTu6m/1
正则表达式真的很强大,很优美,也很有趣。实现方式有很多,如有错误,请帮忙指正,谢谢!
本文为复习用。