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

HTML input如何通过pattern属性限制输入-99至99范围整数

HTML输入框限制-99~99整数的实现方案

之前正则失效的原因

你之前写的正则存在两个核心问题,导致超出范围的数值能通过校验:

  • pattern="[-][0-9][0-9]{2,3}" 规则固定了负号后要跟1位数字+23位数字,实际匹配的是负号加34位数字,自然会放行-999这类超出范围的值
  • [-0-9]|[0-9]{2,3} 分支逻辑错误:第一个分支仅匹配单个负号或单个数字,第二个分支匹配2~3位纯数字,不仅会放行999这类3位数字,甚至单独输入负号也能通过校验

正确实现方式

方案1:正则匹配(适用于text类型输入框)

直接给输入框添加如下pattern属性即可:

<input type="text" pattern="-?[0-9]{1,2}">

正则逻辑说明:

  • -?:代表负号仅可匹配0次或1次,且写在规则最前端,保证负号只能出现在输入值的开头,不会出现在数字中间
  • [0-9]{1,2}:匹配1~2位数字
  • HTML的pattern属性默认会给正则添加首尾全匹配锚点,不需要手动写^和$,因此3位及以上数字、负号不在开头的输入都会被拦截

如果需要更严谨的校验,禁止输入-0、01、-09这类带前导零、无意义的-0值,可以使用更严格的正则:

<input type="text" pattern="(-[1-9][0-9]?|[1-9][0-9]?|0)">

这个规则仅会匹配三类值:-99-1的负整数、0、199的正整数,完全覆盖-99到99的整数范围,没有冗余匹配。

方案2:原生数字输入框限制(更推荐)

如果不需要兼容特殊场景,优先使用type="number"类型的输入框,不需要写正则,仅靠原生属性就能实现范围限制,还能在移动端唤起数字输入键盘:

<input type="number" min="-99" max="99" step="1">

属性说明:

  • min="-99":限制允许输入的最小值为-99
  • max="99":限制允许输入的最大值为99
  • step="1":限制仅能输入整数,禁止小数通过校验

注意事项

  • 上述HTML原生校验默认仅在表单提交时触发,如果需要输入过程中实时拦截非法值,需要额外绑定input事件配合JS做实时校验
  • 所有前端校验都不能替代后端校验,生产环境需要在服务端再次校验入参范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:18:23