JavaScript正则表达式需求:匹配1-100及带P/F的合规格式
解决方案:匹配指定规则的正则表达式
针对你的需求,这里提供一个符合要求的JavaScript正则表达式:
/^(?:(?:100|[1-9]\d?)|(?:100|[1-9]\d?)-(?:100|[1-9]\d?)|[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?))(?:\s*,\s*(?:(?:100|[1-9]\d?)|(?:100|[1-9]\d?)-(?:100|[1-9]\d?)|[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?)))*$/gim
正则拆解说明
我们把规则拆分成几个核心模块,逐个解析:
- 单个合法数字:
(?:100|[1-9]\d?)- 匹配1-99的非零开头数字,或精确匹配100,直接排除0、0开头的无效数字(比如05)
- 纯数字区间:
(?:100|[1-9]\d?)-(?:100|[1-9]\d?)- 由两个合法数字通过连字符
-连接,符合1-100区间的格式要求
- 由两个合法数字通过连字符
- 带P/F前缀的区间:
[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?)- 以大写P或F开头,后续跟合法的数字区间格式
- 分隔符处理:
\s*,\s*- 允许逗号前后有任意数量的空格(包括无空格),适配输入时的空格习惯
- 整体结构:
- 开头
^和结尾$确保整个输入字符串完全匹配规则,避免部分匹配的情况 - 通过
(?:...)*实现多个单元的重复,支持用逗号分隔任意多个合法单元
- 开头
补充说明
- 这个正则仅负责格式校验,如果需要确保区间的起始数字不大于结束数字(比如
15-10这类逻辑无效的区间),仅靠正则无法完成,需要配合JavaScript逻辑做数值校验:function validateInput(input) { const regex = /^(?:(?:100|[1-9]\d?)|(?:100|[1-9]\d?)-(?:100|[1-9]\d?)|[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?))(?:\s*,\s*(?:(?:100|[1-9]\d?)|(?:100|[1-9]\d?)-(?:100|[1-9]\d?)|[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?)))*$/gim; if (!regex.test(input)) return false; // 校验区间的数值合理性 const parts = input.split(/\s*,\s*/); for (const part of parts) { if (part.includes('-')) { const nums = part.replace(/^[PF]/, '').split('-').map(Number); if (nums[0] > nums[1]) return false; } } return true; } - 你之前尝试的正则仅能匹配单个1-100的数字,无法处理区间、前缀和逗号分隔的多单元场景,所以无法满足需求。
测试验证
你提供的所有有效输入都能被这个正则匹配通过:
1,5,10, 15-20, P20-35,F36-40
3,5,10, 15-20, F20-35,P36-50
1,5,10, 15-20, F20-35,P36-60
P1-10,F11-12,13,14,20,99,100
内容的提问来源于stack exchange,提问作者Sarjerao Ghadage
相关产品推荐
相关产品推荐

