校验含首尾空格、至少10个逗号分隔数字的正则修正求助
逗号分隔数字列表校验正则修正方案
原有正则存在的缺陷
- 未匹配规则允许的字符串首尾空白字符,首尾带空格时直接匹配失败
- 未处理单个数字项前后的空白,类似
.678这种项前后带空格的场景会匹配失效 - 数字匹配部分存在重复冗余的捕获组,写法可优化,同时对多小数点非法数字的拦截逻辑可更严谨
修正思路
- 正则首尾增加
\s*匹配,覆盖首尾允许存在空白的规则 - 每个逗号分隔的数字项前后增加
\s*匹配,覆盖项与逗号之间允许存在空白的场景 - 抽离公共的合法数字匹配规则,去掉冗余捕获组,严格限制仅允许出现0或1个小数点,拦截多小数点的非法数字
- 保留数量校验逻辑:第一个数字项后,至少匹配9个「逗号+数字项」的组合,保证总数字个数≥10
修正后正则代码
^\s*(?:[+-]?(?:\d+(?:\.\d*)?|\.\d+))(?:\s*,\s*(?:[+-]?(?:\d+(?:\.\d*)?|\.\d+))){9,}\s*$
匹配说明
- 支持的合法数字格式:
- 带可选正负号的整数,比如
12、-39、+7 - 带可选正负号、整数部分、可选小数部分的小数,比如
2.5、-2.4、100. - 带可选正负号、省略整数部分的小数,比如
.5、.678
- 带可选正负号的整数,比如
- 自动拦截非法内容:非数字字符、包含多个小数点的非法数字(比如测试样例里的
1.4.4.8)、总数字个数不足10个的列表都会校验失败 - 你提供的测试样例校验不通过是符合预期的,因为其中
1.4.4.8包含3个小数点,本身就不属于合法数字格式。
内容的提问来源于stack exchange,提问作者Chen David
相关产品推荐
相关产品推荐

