• 多种方式实现千位分隔符


    今天遇到一个问题,用正则实现千位分隔符,例如:12345678.90 转换成 12,345,678.90。如果用 js 实现挺简单的,然而,正则实现优雅多了,但是如果对正则表达式不熟的话,还是有一定难度的。

    现在对千位分隔符的实现进行总结,不仅仅是正则的实现哦。

    方法一:toLocalString()

    使用方法:

    numObj.toLocaleString([locales[, options]]);

    例如:

    (1234567).toLocaleString();    // '1,234,567'
    (1234567.12345).toLocaleString();       // '1,234,567.123'

    locales 默认为 ‘en-US’,'CN'表示中国,当然结果是一样的。

    如以上例子所示,该方法会忽略小数点后三位之后的数字。

    方法二:正则

    代码:

    string.replace(/(d)(?=(d{3})+$)/g, '$1,');

    例如:

    let reg = /(d)(?=(d{3})+$)/g;
    '1234567'.replace(reg, '$1,');

    (?=exp):表示匹配 exp 前面的位置。

    $1:表示组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

    然而这个正则表达式只适用于整数。因为reg 表达式中,用 $ 匹配结尾,当 string 含有小数点,reg 遇到小数点后就会停止匹配,所以只能分割小数点后的数。

    例如:

    '1234567.12345'.replace(reg, '$1,');  // '1234567.12,345'

    如果想要匹配整数部分,保留小数点部分,可以将 '$' 换为 '.',即:

    reg = /(d)(?=(d{3})+.)/g;      // '1234567.12345'.replace(reg, '$1,') => '1,234,567.12345'

    那么,如果希望整数部分和小数部分都添加千位分隔符,可以通过分支条件实现:

    reg = /(d)(?=(d{3})+(.|$))/g;    // '1234567.12345'.replace(reg, '$1,') => '1,234,567.12,345'

    不过这个需求好像有点奇怪,哈哈哈。

    方法三:js 循环遍历

    代码:

    function thousandsSepar(num) {
    // 只能包含 0 个或 1 个 '.'
      if(!/^d+(.d*)?$/.test(num)) {     return;   }   let str = num + '',      newStr = '',      count = 0,      decimal = '',
         index
    = str.indexOf('.');

    // 保留小数点后 3 位
      if(index > 0) {     decimal = str.substring(index, index + 4);     str = str.substr(0, index + 4);   }   for(let i = index - 1; i >= 0 ; --i) {     newStr += str[i];     ++count;
    // 每 3 位插入一个 ','
        if(count === 3 && i > 0) {       newStr += ',';       count = 0;     }   }   return newStr.split('').reverse().join('') + decimal;
    }

    实现效果同 toLocaleString();js 有多种实现方式,这里只是举个栗子。

    参看:

    请使用千位分隔符(逗号)表示web网页中的大数字

    MDN

    正则表达式30分钟入门教程

  • 相关阅读:
    日志记录的作用和方法 java
    log4j自动加载原理
    java反射中的动态代理机制(有实例)
    万能的ctrl+shift+F(Element 'beans' cannot have character [children], because the type's content type is element-only.错误)
    Spring的@ModelAttribute注解
    Spring MVC 的@RequestParam注解和request.getParameter("XXX")
    SpringMVC 示例实战教程
    ecshop教程:重置后台密码MD5+salt
    github常见操作和常见错误!错误提示:fatal: remote origin already exists.
    ECShop函数列表大全
  • 原文地址:https://www.cnblogs.com/xxhuan/p/7648450.html
Copyright © 2020-2023  润新知