我正在尝试使用以下方法创建一个仅接受数字和一个可选小数点的正则表达式:
const filterValue = (value) => value.replace(/^([0-9]*|\d*\.\d{1}?\d*)$/g, '').replace(/(\..*)\./g, '$1');
但是filterValue('test1234test')
给了我test1234test
。
为什么?
答案 0 :(得分:1)
您似乎只想保留第一个点以及除第一个点和数字之外的所有字符。
您可以使用
const filterValue = (value) => value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')
详细信息
.replace(/^([^.]*\.)|\.+/g, '$1')
-捕获从字符串开头到第一个.
的子字符串进入组1,以便稍后在替换模式中使用$1
向后引用来恢复该部分,并删除所有其他任何地方都有1个以上的点.replace(/[^\d.]+/g, '')
-删除除数字和.
之外的任何字符的一次或多次出现JS演示:
const filterValue = (value) => value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')
console.log(filterValue('test1234test'));
console.log(filterValue('test1.2.3.4test'));
console.log(filterValue('te.st1.2.3.4test'));