js 正则 数值格式化 小数、符号

格式化数字

/**
 * 限制只能输入数字和一个小数点
 * @param value 要处理的数据
 * @param option 配置
 *        --- afterLength   number  小数点后位数,如果为0,则不允许输入小数点
 *        --- beforeLength  number  小数点前位数, 不填则无限制
 *        --- allowMinus    boolean 是否允许负数
 * @returns string
 */
export function checkNumber(value, option = { beforeLength: 3, afterLength: 2, allowMinus: false }) {
  if (!value) return value
  let modelValue = String(value)
  // 默认配置
  const defaultOption = {
    beforeLength: 3,
    afterLength: 2,
    allowMinus: false
  }
  // 应用配置项
  Object.keys(defaultOption).forEach(key => {
    // 用户传入的配置项为null 或 undefined 时,应用默认配置
    defaultOption[key] = option[key] ?? defaultOption[key]
  })

  let partOfMinus = defaultOption.allowMinus ? '\\-{0,1}' : ''
  let partOfInt = `[0-9]{0,${defaultOption.beforeLength}}`
  let partOfDecimal = defaultOption.afterLength > 0 ? `(\\.{1}[0-9]{0,${defaultOption.afterLength}})?` : ''
  let reg = new RegExp(`${partOfMinus}${partOfInt}${partOfDecimal}`)
  const result = reg.exec(modelValue)
  console.log(result)
  // Number转换是为了防止用户输入000这样的情况。
  // 在用户输入的最后一位不是小数点 且 用户不是输入 符号- 时执行
  return result[0][result[0].length - 1] !== '.' && result[0] !== '-' ? String(Number(result[0])) : result[0]
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值