Javascript 正则表达式-仅接受整数和一个小数点

Javascript 正则表达式-仅接受整数和一个小数点,javascript,regex,Javascript,Regex,我正在尝试使用以下方法创建一个只接受数字和一个可选小数点的正则表达式: const filterValue = (value) => value.replace(/^([0-9]*|\d*\.\d{1}?\d*)$/g, '').replace(/(\..*)\./g, '$1'); 但是filterValue('test1234test')返回了test1234test 为什么?您似乎只想保留第一个点,以及除第一个点和数字以外的所有字符 你可以用 const filterValue =

我正在尝试使用以下方法创建一个只接受数字和一个可选小数点的正则表达式:

const filterValue = (value) => value.replace(/^([0-9]*|\d*\.\d{1}?\d*)$/g, '').replace(/(\..*)\./g, '$1');
但是
filterValue('test1234test')
返回了
test1234test


为什么?

您似乎只想保留第一个点,以及除第一个点和数字以外的所有字符

你可以用

const filterValue = (value) => value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')
详细信息

  • .replace(/^([^.]*\.)\124;\+/g,$1')
    -捕获从字符串开头到第一个
    的子字符串,将其放入组1,以便稍后使用替换模式中的
    $1
    反向引用还原该部分,并在其他任何位置删除任何1+点
  • .replace(/[^\d.]+/g',)
    -删除除数字和
    之外的任何字符的一个或多个出现处
JS演示:

const filterValue=(value)=>value.replace(/^([^.]*\)\.+/g,$1')。replace(/[^\d.]+/g'))
log(filterValue('test1234test');
log(filterValue('test1.2.3.4test');

console.log(filterValue('te.st1.2.3.4test')
您的第一个模式与非数字、非小数不匹配,因此它们不会被替换为空字符串try
值。替换(/^([^.]*\)\+/g,$1')。替换(/[^\d.]+/g',)
如何保持第二个模式(
/(\..*)\./g,$1'
)不变?是否要匹配
.123
123.
(即使它们通常是写在
0.123
123.0
上的)。@CarySwoveland我想匹配前两个示例,而不是第二个示例(我不想允许使用字母字符)