给字符串添加分隔符

问题

1234567890.12 变成 1,234,567,890.12

分析:
1.将字符串分成两部分成整数 和 小数两部分
2.整数部分从后向前每三位添加一个','
3.对字符串的处理,不会改变原字符串,故采用拼接字符串


  • 非正则
1.indexof('.')  分割字符串  同时要注意没有小数的情况
2.循环添加','  注意结束条件 
3.最后在将 3 个部分合并

function fn(str){
    var ilen = str.indexOf('.');
    ilen = (ilen === -1) ? str.length :ilen
    var newstr='';
    for(var i = ilen ; i > 3 ; i-=3){
        newstr = ',' + str.slice(i-3,i) + newstr;
    }
    newstr = str.slice(0,i) + newstr + str.slice(ilen);
    return newstr;
}
console.log(fn("234"))

  • 正则
1.indexOf(',') 分割字符串
2.对3求余 ,判断正则替换开始的位置
3. 拼接3个部分的字符串

function fn1(str){
    var ilen = str.indexOf('.');
    ilen = (ilen === -1) ? str.length :ilen;
    var i = ilen % 3 ? ilen % 3 : 3; 
        

    var regStr = str.slice(i,ilen);
    var newstr = regStr.replace(/(\d{3})/g,',$1');

    newstr =  str.slice(0,i) + newstr + str.slice(ilen);
    return newstr;
}
console.log(fn1("23"))

  • 总结
1. 没有小数点的情况,两种方法处理一样
ilen = (ilen === -1) ? str.length : ilen;
2. 整数部分 刚好只有3位数情况 
非正则 :for  循环中 i > 3
正则: var i = ilen % 3 ? ilen % 3 : 3; 
避免出现  fn("234")   // ,234
3.两种方法 都是将字符串分成3部分 进行处理拼接
[i <= 3]  + [,234,567,890] + [.123456]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容