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

JSON Schema正则表达式验证失效:固定长度数字字段验证不生效求助

解决JSON Schema正则验证长度不生效的问题

嘿,这种情况我碰到过好多次,大概率是你的正则表达式没加字符串锚点(^ 和 $)!没锚点的话,正则只会检查字段里有没有符合长度的数字片段,而不是严格要求整个字段就是恰好指定长度的数字。

举个反例,你可能写了类似这样的错误Schema:

{
  "type": "object",
  "properties": {
    "字段1": {
      "type": "string",
      "pattern": "\\d{6}"
    },
    "字段2": {
      "type": "string",
      "pattern": "\\d{10}"
    }
  },
  "required": ["字段1", "字段2"]
}

这种写法下,像 "1234567" 这种7位数字也能通过字段1的验证——因为它里面包含了连续6位数字的片段,正则只会匹配到这部分,不会管整个字符串的长度。

正确的写法必须加上锚点,强制匹配整个字符串

{
  "type": "object",
  "properties": {
    "字段1": {
      "type": "string",
      "pattern": "^\\d{6}$"
    },
    "字段2": {
      "type": "string",
      "pattern": "^\\d{10}$"
    }
  },
  "required": ["字段1", "字段2"]
}

这里的 ^ 代表字符串的起始位置,$ 代表结束位置,两者配合就能确保整个字段内容恰好是6位/10位数字,不会出现部分匹配的漏网之鱼。

还要额外检查两个细节:

  • 确认字段类型是string:如果字段设成了number类型,正则验证根本不会生效(正则只作用于字符串)。比如输入12345(5位数字)会被当成数字处理,这时候必须把字段类型改成string,让用户输入字符串形式的数字。
  • 验证工具的兼容性:有些旧版本的JSON Schema验证库对pattern关键字的支持有偏差,尽量用主流的验证器(比如Ajv、官方的JSON Schema Validator)来测试。

你把正则加上锚点再试试,不符合长度的数据应该就能被正确拦截了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:22:15