【问题标题】:Regex - accept only integers and one decimal point正则表达式 - 只接受整数和一个小数点
【发布时间】:2020-04-14 22:11:01
【问题描述】:

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

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

但是filterValue('test1234test') 还给我test1234test

为什么?

【问题讨论】:

  • 您的第一个模式与非数字、非小数不匹配,因此它们不会被空字符串替换
  • 试试value.replace(/^([^.]*\.)|\.+/g, '$1').replace(/[^\d.]+/g, '')
  • 我能做些什么来保持第二个模式 (/(\..*)\./g, '$1') 不变?
  • 你想匹配.123123.(尽管它们通常写成0.123123.0)。
  • @CarySwoveland 我想匹配你的前两个例子,而不是第二个(我不想允许字母字符)

标签: javascript regex


【解决方案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'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多