正则控制输入数字格式,可控制输入小数(最多四位,最少两位),可控制输入负数,可控制输入

/**
 * kevin 2021/2/22
 * @description 正则控制输入数字格式;可输入小数
 * @param param
 * @param num 保留小数位数只能保留2位,3位,4位, 默认2位
 * @param negativeBool 是否可以为负数 默认可以为负数
 * @param decimalBool 是否可以输入小数 默认可以输入小数
 * @returns {string | null}
 */
export function checkPrice(param, num, negativeBool, decimalBool) {
  // 判断参数是否包含负数
  var num_ = ''
  if (negativeBool !== false) {
    if (param.split('')[0] === '-') { // 判断第一个字符是否有'-'如果有的话则保留
      num_ = '-'
    }
  }
  var price = '' + param
  if (decimalBool !== false) {
    if (num === 3) {
      price = price
        .replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
        .replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
        .replace(/^\./g, '') // 保证第一个为数字而不是.
        .replace('.', '$#$')
        .replace(/\./g, '')
        .replace('$#$', '.')
        .replace(/^(\-)*(\d+)\.(\d\d\d).*$/, '$1$2.$3') // 只能输入3个小数
    } else if (num === 4) {
      price = price
        .replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
        .replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
        .replace(/^\./g, '') // 保证第一个为数字而不是.
        .replace('.', '$#$')
        .replace(/\./g, '')
        .replace('$#$', '.')
        .replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3') // 只能输入4个小数
    } else {
      price = price
        .replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
        .replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
        .replace(/^\./g, '') // 保证第一个为数字而不是.
        .replace('.', '$#$')
        .replace(/\./g, '')
        .replace('$#$', '.')
        .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3') // 只能输入两个小数
    }
  } else {
    price = price
      .replace(/^\./g, '') // 保证第一个为数字而不是.
      .replace(/\D/g, '')
  }
  if (price.indexOf('.') < 0 && price !== '') {
    // 以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
    price = parseFloat(price)
  }
  price = num_ + price
  return price
}
posted @ 2021-05-08 15:18  吃不棒的胖胖糖  阅读(905)  评论(0编辑  收藏  举报