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

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

正则拆解说明

我们把规则拆分成几个核心模块,逐个解析:

  1. 单个合法数字:(?:100|[1-9]\d?)
    • 匹配1-99的非零开头数字,或精确匹配100,直接排除0、0开头的无效数字(比如05)
  2. 纯数字区间:(?:100|[1-9]\d?)-(?:100|[1-9]\d?)
    • 由两个合法数字通过连字符-连接,符合1-100区间的格式要求
  3. 带P/F前缀的区间:[PF](?:100|[1-9]\d?)-(?:100|[1-9]\d?)
    • 以大写P或F开头,后续跟合法的数字区间格式
  4. 分隔符处理:\s*,\s*
    • 允许逗号前后有任意数量的空格(包括无空格),适配输入时的空格习惯
  5. 整体结构:
    • 开头^和结尾$确保整个输入字符串完全匹配规则,避免部分匹配的情况
    • 通过(?:...)*实现多个单元的重复,支持用逗号分隔任意多个合法单元

补充说明

  • 这个正则仅负责格式校验,如果需要确保区间的起始数字不大于结束数字(比如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:35:13