javascript中replace正则表达式解决数字溢出及人民币格式化问题

javascript中数字类型最多只支持16位长度,超过的部分会变成0或进一变成0。

如下代码:

 

var a = 12345678998765432112;
alert(a);

 

运行结果如下:

 

解决以上问题的最简单的方法就是把数字类型转成字符串类型表示。

但是,如果我们是通过ajax从服务端请求的数据怎么办呢?

按如下方式,把ajax返回的数据类型改为“text”,这样返回的数据就是字符串形式的,再利用正则表达式,把数字全部加上引号,再转换成json对象即可。

 

$.post(sign.url,sign.param,function(result){
	result = JSON.parse(result.replace(/(\"\w+\":)(\d+)([,}])/g,"$1\"$2\"$3"));
	doSomething();
},'text');


示例代码如下:

 

 

var result = '"result":{"id":123456789123456789,"name":"alan","anotherNumber":987654321987654321}';
result = result.replace(/(\"\w+\":)(\d+)([,}])/g,"$1\"$2\"$3");
alert(result);

运行结果为:

 

可以看到数字都加上了引号变成了字符串,完美解决了数字溢出的问题。

另外,人民币的格式化也可以使用正则表达式处理哦,如下附上代码:

 

result = result.replace(/(\"(?:startingPrice|originalPrice|buyNowPrice|bidPrice)\":)([\d\.]*)([,}])/g,function($0,$1,$2,$3){
                           return $1 + "\"" + moneyFormat($2,2) + "\"" + $3;
                       });

其中,replace的第二个参数为function,此function的参数为:$0为整个匹配项,$1为第一个捕获组,$2为第二个捕获组(即捕获到的money数值),$3为第三个捕获组。

 

moneyFormat代码如下:

 

 

var moneyFormat=function(s, n)   
{   
   n = n > 0 && n <= 20 ? n : 2;   
   s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";   
   var l = s.split(".")[0].split("").reverse(),   
   r = s.split(".")[1];   
   t = "";   
   for(i = 0; i < l.length; i ++ )   
   {   
      t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");   
   }   
   return t.split("").reverse().join("") + "." + r;   
} ;


以上就是正则表达式解决数字类型和money格式化的方法,欢迎指正,谢谢。

 

关于正则表达式的使用可以参考以下文章:

http://www.cnblogs.com/Bruce_H21/archive/2008/02/21/1076420.html

欢迎关注我的公众号“彤哥读源码”,查看更多“源码&架构&算法”系列文章, 与彤哥一起畅游源码的海洋。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值