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

如何使用正则表达式校验UUID?jsonschema校验报错排查

校验失败核心原因

乱码不是校验失败的根因,只是正则写法错误带来的附带现象:你看到的疑似西里尔字母的乱码,是JSON字符串中\b未正确转义被解析为退格控制字符、错误提示渲染异常导致的。
你写的正则存在3个致命问题,直接导致所有正常UUID都无法匹配:

  • jsonschema的pattern字段遵循ECMA 262正则规范,不支持JS正则字面量的前后斜杠与修饰符写法,你写的开头/、结尾的/gi都会被当成正则的匹配内容,相当于强制要求传入字符串必须以/开头、以/gi结尾,完全不符合UUID的格式。
  • 正则中冗余添加的\b单词边界符无实际作用,还会因为JSON转义问题产生乱码。
  • 用[\w]匹配字符段的写法不符合规范:\w默认匹配下划线_,会放过不符合UUID规则的非法值;且该规则没有加^/$首尾锚定,只要字符串任意位置包含符合规则的片段就会判定通过,存在校验绕过风险。

你用来测试的aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee本身完全符合UUID的字符格式规则,之前匹配失败完全是上述正则写法错误导致的。

正确实现方案

方案1:正则校验(兼容所有jsonschema版本)

去掉正则前后的斜杠、修饰符与冗余的\b,严格限制十六进制字符范围,加上首尾锚定,配置如下:

{
  "companyId": {
    "type": "string",
    "default": "",
    "title": "The companyId Schema",
    "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
    "examples": ["71158c1a-56fd-4dd4-8e7f-fb95711a41de"]
  }
}

方案2:内置format校验(推荐)

如果使用的jsonschema库支持format校验,直接用内置的uuid格式规则即可,无需自行维护正则,容错率更高:

{
  "companyId": {
    "type": "string",
    "format": "uuid",
    "default": "",
    "title": "The companyId Schema",
    "examples": ["71158c1a-56fd-4dd4-8e7f-fb95711a41de"]
  }
}

注意:部分jsonschema实现默认关闭非核心format规则的校验,使用前需要手动开启format校验开关。

你之前测试的3个正则问题汇总
  • /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$:多余的前后斜杠会被当成匹配内容,冗余\b存在转义乱码风险
  • /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/gi:除上述问题外,结尾的gi修饰符也会被当成匹配内容,jsonschema的pattern默认已支持大小写匹配、配合^$锚定即可匹配完整字符串,无需额外加修饰符
  • [\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}:无首尾锚定存在绕过风险,\w匹配下划线会放过非法值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:16:02