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

求可限制<input>标签输入为指定格式的合规正则表达式

正确的正则表达式解决方案

首先明确你需要限制的合法单元仅有以下4种,所有输入必须是这些单元用英文逗号,分隔的组合(不能有首尾逗号,单元之间不能连续多个逗号):

  • 单个正整数:比如 1、100
  • 取反的单个正整数:比如 !2、!123
  • 正整数范围:比如 [1-2]、[10-200]
  • 取反的正整数范围:比如 ![1-4]、![30-50]

针对这个规则,正确的正则表达式如下:

^(?!,)(?:!\d+|!\[\d+-\d+\]|\d+|\[\d+-\d+\])(?:,(?:!\d+|!\[\d+-\d+\]|\d+|\[\d+-\d+\]))*$

嵌入到<input>标签的写法:

<input type="text" pattern="^(?!,)(?:!\d+|!\[\d+-\d+\]|\d+|\[\d+-\d+\])(?:,(?:!\d+|!\[\d+-\d+\]|\d+|\[\d+-\d+\]))*$" title="请输入合法格式,例如:1、1,2,3、!2,!3、[1-2]、![1-4],1,!7等">

正则规则拆解

  • ^(?!,):确保输入开头不会是逗号
  • (?:!\d+|!\[\d+-\d+\]|\d+|\[\d+-\d+\]):匹配单个合法单元,四种类型任选其一:
    • !\d+:匹配!加至少一位数字的结构
    • !\[\d+-\d+\]:匹配!加方括号包裹的数字-数字范围结构
    • \d+:匹配至少一位数字
    • \[\d+-\d+\]:匹配方括号包裹的数字-数字范围结构
  • (?:,(?:...))*:匹配零个或多个「逗号+合法单元」的组合,保证单元之间只用单个逗号分隔,且输入结尾不会出现逗号

原正则失效原因

你之前的正则只是松散地允许字符组合,没有约束每个单元的完整结构——既没禁止连续的!、-或逗号,也没限定方括号内必须是数字-数字的合法格式,所以会放行各种乱输入的非法字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:32:14