前段时间腾讯招聘,群友去了以后带回来的题目。
把数字格式123456789转换成123,456,789.
由于本人对正则一窍不通,所以根本就想不到用正则去处理这个问题,于是用的是分割字符串的办法。
JavaScript代码
- <script>
- function changeNumber(number,end){
- number += "" //转换成字符串
- var numberL = number.length; //获取数据长度
- //长度小于3的直接输出不需要加千分号
- if(numberL <= 3){
- return (number);
- }
- //长度大于3的处理
- else{
- var numberArray = [];//定义分割字符数组
- var remainder = numberL%end; //获取获取数据长度余数,确保分割位数正确
- //如果有余数 则不能平均格数分配千分符,所以把剩余位数从最前面取出
- if(remainder){
- //alert("有余数")
- var numberPart1 = number.slice(0,remainder); //取字符串多余位数
- var numberPart2 = number.slice(remainder,numberL+1); //剩余的位数正好可以被千分符号 正常隔开
- }
- else{
- //alert("没余数")
- var numberPart2 = number; //保持数据不变化
- }
- //递归截取数据 存入数组 参数为 start开始截取位置 end结束截取位置 cut截取长度
- function suanfa(start,end,cut){
- if(end <= numberL ){
- numberArray.push(numberPart2.slice(start,end));
- suanfa(start+cut,end+cut,cut);
- }
- }
- suanfa(0,end,3);
- //拼接字符串
- newNumber = remainder ? numberPart1+","+numberArray.join(","):numberArray.join(",");
- return(newNumber);
- }
- }
- </script>
代码够多的把,能力不行就是没办法。
测试地址:http://dabaii.com/demo/2009/01/index.html
正则的方法:
JavaScript代码
- alert("12432423423".replace(/(?=(?!\b)(?:\w{3})+$)/g,","))
不过用js的方法让我也长进了不少,至少很少使用的递归我今天倒是第一次用到了。


