使用正则实现数字千分位处理

// 金额千分位格式化
function momenyFormat(num) {
  // 数字转字符串
  let result = `${num}`;
  // 校验输入值是否为数字
  const regNumber = /^\d+$|(\d+\.\d+)/g;
  // 校验小数点及右侧部分
  const regRight = /(?<=\d)(\.\d+)/g;
  // 校验小数点左侧的部分
  const regLeft = /(\d)(?=(\d{3})+$)/g;
  // 判断是否是数字
  if (regNumber.test(result)) {
        // 判断是否包含小数点
    if (/\./g.test(result)) {
            // 提取小数点和右侧部分
      const right = regRight.exec(result)[0];
            // 替换小数点和右侧部分为空白,得到小数点左侧部分
            // 对左侧部分进行千分位处理
      const left = result.replace(regRight, "").replace(regLeft, "$1,");
            // 左右两部分拼接
      result = `${left}${right}`;
    } else {
            // 不包含小数点,直接千分位处理
      result = result.replace(regLeft, "$1,");
    }
  } else {
    console.warn(`invalid number ${num}`);
  }
  return result;
}

console.log(momenyFormat()); // warn + undefined
console.log(momenyFormat(1231)); // '1,231'
console.log(momenyFormat("123213.23211w")); // warn + '123213.23211w'
console.log(momenyFormat(1232137.23211)); // 1,232,137.23211
console.log(momenyFormat("32s.324")); // warn + "32s.324"
console.log(momenyFormat("122213,343")); // warn + "122213,343"

image.png

你可能感兴趣的:(使用正则实现数字千分位处理)