js中利用正则表达式对数字格式化(用于金额的输入格式化)

代码 · 2023-08-04

之前在做项目的时候有要输入数字金额的需求,需要对数字进行格式化操作保证数据的正确性,搜罗了一些方法

numberRegExp.js
export function posIntegerRx(value, length = 15) {
  //正整数包含0
  value = value.toString()
  value = value.replace(/[^\d]/g, '') // 只能输入数字
  value = value.replace(/^0+(\d)/, '$1') // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  const reg = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(reg), '$1') // 最多保留15位整数
  return value
}
export function negIntegerRx(value, length = 15) {
  //负整数包含0
  value = value.toString()
  value = value.replace(/[^\-\d]/g, '') // 只能输入-和数字
  value = value.replace(/^[1-9]/g, '') // 不能以1-9开头
  value = value.replace(/\-{2,}/g, '-') // -只能保留一个
  value = value.replace(/(\d)\-/g, '$1') // 数字后面不能接-,不能出现类似-11-2,12-,11-23
  value = value.replace(/-(0+)/g, '0') // 不能出现-0,-001,-0001类似
  value = value.replace(/^0+(\d)/, '0') // 第一位0开头,0后面为数字,则过滤掉,取0
  const reg = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(reg), '$1') // 最多保留15位整数
  return value
}

export function integerRx(value, length = 15) {
  //负整数包含0
  value = value.toString()
  value = value.replace(/[^\-\d]/g, '') // 只能输入-和数字
  value = value.replace(/\-{2,}/g, '-') // -只能保留一个
  value = value.replace(/(\d)\-/g, '$1') // 数字后面不能接-,不能出现类似-11-2,12-,11-23
  value = value.replace(/-(0+)/g, '0') // 不能出现-0,-001,-0001类似
  value = value.replace(/^0+(\d)/, '$1') // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  const reg = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(reg), '$1') // 最多保留15位整数
  return value
}

export function posFloatRx(value, length = 15) {
  //正小数包含0保留两位
  value = value.toString()
  value = value.replace(/[^\d.]/g, '') // 只能输入数字和.
  value = value.replace(/^\./g, '') //第一个字符不能是.
  value = value.replace(/\.{2,}/g, '.') // 不能连续输入.
  value = value.replace(/(\.\d+)\./g, '$1') // .后面不能再输入.
  value = value.replace(/^0+(\d)/, '$1') // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  const reg = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(reg), '$1') // 最多保留15位整数
  value = value.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
  return value
}
export function negFloatRx(value, length = 15) {
  //负小数包含0保留两位
  value = value.toString()
  value = value.replace(/[^\-\d.]/g, '') // 只能输入-和数字和.
  value = value.replace(/^[^\-0]/g, '') // 只能-和0开头
  value = value.replace(/\-{2,}/g, '-') // 不能连续输入-
  value = value.replace(/(-)\./g, '$1') // -后面不能输入.
  value = value.replace(/\.{2,}/g, '.') // 不能连续输入.
  value = value.replace(/(\.\d+)\./g, '$1') // .后面不能再输入.
  value = value.replace(/(\d+|\.)-/g, '$1') // 数字和.后面不能接-,不能出现类似11-, 12.-
  value = value.replace(/(-)0+(\d+)/g, '$1$2') // 不能出现-01,-02类似
  value = value.replace(/^0+(\d|.)/, '0') // 第一位0开头,0后面为数字或者.,则过滤掉,取0
  const reg = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(reg), '$1') // 最多保留15位整数
  value = value.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
  return value
}

export function floatRx(value, length = 15) {
  //全数字带两位小数
  value = value.toString()
  value = value.replace(/[^\-\d.]/g, '') // 只能输入.和-和数字
  value = value.replace(/^\./g, '') //第一个字符不能是.
  value = value.replace(/\.{2,}/g, '.') // 不能连续输入.
  value = value.replace(/(\.\d+)\./g, '$1') // .后面不能再输入.
  value = value.replace(/(-)\./g, '$1') // -后面不能输入.
  value = value.replace(/\-{2,}/g, '-') // -只能保留一个
  value = value.replace(/(\d+|\.)-/g, '$1') // 数字和.后面不能接-,不能出现类似11-, 12.-
  value = value.replace(/-(0){2,}/g, '$1') // 不能出现-00,-001,-0001类似
  value = value.replace(/(-)0+(\d+)/g, '$1$2') // 不能出现-01,-02类似
  value = value.replace(/^0+(\d)/, '$1') // 第一位0开头,0后面为数字,则过滤掉,取后面的数字
  const rx = '/(\\d{' + (length < 15 ? length : 15) + '})\\d*/'
  value = value.replace(eval(rx), '$1') // 最多保留15位整数
  value = value.replace(/(\.\d{2})\d*/, '$1') // 最多保留2位小数
  return value
}

在需要用到的地方引入即可

import { negFloatRx, floatRx, posFloatRx } from '文件路径/numberRegExp.js'
  1. 格子衬衫 2023-08-05

    牛逼

Theme Jasmine by Kent Liao