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

如何编写正则表达式校验仅含单个点且包含多个数字的字符串

正则实现方案

需求梳理

你需要的正则需要满足以下核心规则:

  • 仅允许合法数字、空格、换行、制表符四类字符
  • 每个数字中最多包含1个点,不允许出现1.2.3这类多小数点的非法格式
  • 整个文本至少包含2个及以上的合法数字
  • 支持任意数量的空白字符(空格、换行、制表符)分隔数字

最终正则

场景1:要求小数点前后都必须有数字(不支持2.或.1格式)

/^\s*(?:\d+(?:\.\d+)?\s+){1,}\d+(?:\.\d+)?\s*$/

场景2:支持小数点结尾(适配你给出的示例中的2.格式)

/^\s*(?:\d+(?:\.\d*)?\s+){1,}\d+(?:\.\d*)?\s*$/

规则说明

  • \s 本身就覆盖了空格、换行、制表符三类空白字符,不需要额外单独声明
  • \d+(?:\.\d*)? 限制每个数字最多只有1个小数点,且小数点前必须有至少1位数字,避免出现纯小数点的非法内容
  • (?:...){1,} 要求至少存在1次「合法数字+分隔空白」的组合,加上末尾的1个合法数字,就保证了整个文本至少有2个及以上的合法数字
  • 首尾的\s*允许文本开头和结尾存在任意数量的空白

原正则的问题

你之前使用的/^[0-9 .\n\t]*$/仅做了合法字符范围校验,存在两个明显缺陷:

  • 无法限制单个数字内的小数点数量,1.2.3这类非法格式也会校验通过
  • 无法校验合法数字的数量,空字符串、仅包含单个数字的内容也会被判定为合法

测试验证

以场景2的正则为例:
✅ 校验通过的内容:

  • 11.00 11.000 1.0 1 1 2. (你给出的示例)
  • 1 2
  • 123.45\n67.8\t9
    ❌ 校验不通过的内容:
  • 1.2.3 4 (存在多小数点的数字)
  • 1 (仅1个数字)
  • a 12 (存在非法字符)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:24:04