格式化数字 /** * 限制只能输入数字和一个小数点 * @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] }