如何编写正则表达式校验仅含单个点且包含多个数字的字符串
正则实现方案
需求梳理
你需要的正则需要满足以下核心规则:
- 仅允许合法数字、空格、换行、制表符四类字符
- 每个数字中最多包含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 2123.45\n67.8\t9
❌ 校验不通过的内容:1.2.3 4(存在多小数点的数字)1(仅1个数字)a 12(存在非法字符)
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

