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
相关产品推荐
相关产品推荐

