You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写JavaScript正则表达式:仅保留数字与单个点号

解决JavaScript中保留单个点号的数字清洗问题

你需要清洗字符串,只保留数字和最多一个点号,同时移除所有其他非数字字符。之前的正则/[^0-9.]/g只能过滤非法字符,但无法限制点号数量,这里提供两种可行方案:

方案一:分两次正则替换

这种方式简单直接,分两步处理:

  1. 先移除所有非数字、非点号的字符
  2. 再确保字符串中最多只有一个点号

代码示例:

function cleanInput(input) {
  // 第一步:过滤掉所有非数字和非点号的字符
  const filtered = input.replace(/[^0-9.]/g, '');
  // 第二步:移除第一个点号之后的所有点(保留最后一个点)
  const result = filtered.replace(/\.(?=.*\.)/g, '');
  return result;
}

// 测试用例
console.log(cleanInput('4.2'));      // "4.2"(符合要求)
console.log(cleanInput('a4.21'));    // "4.21"(移除了字母a)
console.log(cleanInput('14.22'));    // "14.22"(符合要求)
console.log(cleanInput('2.-4'));     // "2.4"(移除了减号)
console.log(cleanInput('21..43'));   // "21.43"(移除了多余的连续点)
console.log(cleanInput('1.2.3.4'));  // "123.4"(只保留最后一个点)

如果想保留第一个点号(而非最后一个),可以把第二步的正则换成ES2018支持的反向预查写法:

const result = filtered.replace(/(?<!^[^.]*)\./g, '');

此时cleanInput('1.2.3.4')会得到"1.234"。

方案二:字符遍历回调法(兼容性更好)

如果需要兼容不支持ES2018的旧环境,可以用replace的回调函数逐个处理字符,只保留数字和第一个点号:

function cleanInput(input) {
  let hasDot = false;
  return input.replace(/./g, char => {
    // 数字直接保留
    if (/[0-9]/.test(char)) {
      return char;
    }
    // 仅在未出现过点号时保留当前点
    if (char === '.' && !hasDot) {
      hasDot = true;
      return char;
    }
    // 其他字符全部丢弃
    return '';
  });
}

// 测试用例
console.log(cleanInput('2.-4'));     // "2.4"
console.log(cleanInput('21..43'));   // "21.43"
console.log(cleanInput('1.2.3.4'));  // "1.234"(保留第一个点)

方案对比

  • 方案一代码简洁,适合现代浏览器/Node.js环境;
  • 方案二逻辑直观,兼容性拉满,适合需要兼容旧环境的场景。

内容的提问来源于stack exchange,提问作者noob_developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:40:24