JS 如何写 正则替换 得到金额字符串

想要实现的效果为
例子:

var a = "1.001.001.001;//变为1.00
var b = "asdf8bdf.753";//变为8.75
var c = "0842.1.2.5";//变为842.12
var d = "08426544asdf0";//变为84265440

`
想要满足
1:替换掉非数字非小数点字符
2:小数点最多只有一个,其他小数点替换为空
3:小数点后只保留两位小数,并且不四舍五入

我的想法步骤是
1:先替换清除该字符串中非数字非小数点的
2:如果有超过一个小数点,替换掉空
3:如果有小数点,并且小数点后超过两位,替换为空

请教下这样的正则应该怎么写

阅读 5.5k
3 个回答

思路上确实是你的思路

const parse = str =>
  str
    .replace(/^([^-]+)(?=-\S*)/, '') // 移除第一个负号之前的所有字符
    .replace(/(?<!^)-/g, '')         // 移除第一个负号之外的所有负号
    .replace(/[^0-9.-]/g, '')        // 移除数字 小数点 负号之外的所有字符
    .replace(/(?<!^[\d-]+)\./g, '')   // 移除第一个小数点之外的所有句点
    .replace(/^0*(-?\d+)(\.(\d{1,2}))?\S*?$/, '$1$2') // 保留两位小数

parse('1.001.001.001')
// 1.00

parse('asdf8bdf.753')
// 8.75

parse('0842.1.2.5')
// 842.12

parse('08426544asdf0')
// 84265440

parse('08426-544asdf0.12.-1.12123')
// -5440.12

按照你的逻辑

  1. 替换非数字小数点 /[^\d.]/g
  2. 再切割 .split('.')
  3. 数组第一个是整数, 后面的结合起来取前面两个

不知道这个思路对不对

  1. 先替换掉所有的非数字和非点号
  2. 字符串转化成一个浮点数

const parseNumber = (text) => Number.parseFloat(text.replace(/[^\d\.]/g, ''))

soonfy

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏