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

如何为JSON Schema中所有string类型字段添加全局pattern验证(Ajv)

解决Ajv全局验证所有string类型属性的问题

你之前的写法有两个关键问题:

  1. 关键字拼写错误:allof应该是驼峰式的allOf;
  2. 规则应用对象错误:pattern是针对string类型的验证关键字,你直接在object类型的allOf里添加该规则,Ajv会忽略这种不匹配类型的验证逻辑,自然不会生效。

正确实现方式

要给所有string类型的属性(包括已定义和未定义的额外属性)添加全局特殊字符验证,推荐用patternProperties结合if/then的方案,能覆盖所有属性场景:

{
  "type": "object",
  // 这里定义你的对象属性(示例)
  "properties": {
    "username": { "type": "string" },
    "description": { "type": "string" },
    "age": { "type": "integer" }
  },
  // 允许额外属性(不需要的话可以设为false)
  "additionalProperties": true,
  "allOf": [
    {
      "patternProperties": {
        // 匹配所有属性名
        ".*": {
          // 判断属性值是否为string类型
          "if": { "type": "string" },
          // 符合条件则应用正则验证(禁止<>%${}[]这些特殊字符)
          "then": { "pattern": "^[^<>%${}\\[\\]]*$" }
        }
      }
    }
  ]
}

补充说明

  • 正则写法:^[^<>%${}\\[\\]]*$ 里的^(字符集开头)表示取反,即整个字符串不能包含<>%${}[]这些特殊字符,注意对[、]、$等正则特殊字符做转义;
  • 如果你的属性都是预先定义好的,也可以把string规则抽成复用片段,更简洁:
{
  "type": "object",
  "$defs": {
    "safeString": {
      "type": "string",
      "pattern": "^[^<>%${}\\[\\]]*$"
    }
  },
  "properties": {
    "username": { "$ref": "#/$defs/safeString" },
    "description": { "$ref": "#/$defs/safeString" },
    "age": { "type": "integer" }
  },
  // 额外属性也应用该规则(如果允许额外属性为非string类型,就不要用这个)
  "additionalProperties": { "$ref": "#/$defs/safeString" }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:30:52