JSON Schema中能否结合enum与RegEx pattern实现特定值约束?
JSON Schema中enum与pattern的结合方案
没法直接把enum和pattern结合实现你要的需求——JSON Schema里如果同时给字段设置enum和pattern,会要求值同时满足两个条件:必须是枚举列表里的某一项,还得符合正则规则,这显然和你要的“枚举值可加后缀、soda有特殊格式”逻辑不符。
正确的做法是用pattern整合所有规则,比把所有可能值全列出来更简洁易维护,具体方案如下:
最终Schema示例
{ "category": { "type": "string", "pattern": "^(water|beer|wine)\\*?$|^soda\\([a-z]{0,2}\\)\\*?$" } }
正则规则拆解
^(water|beer|wine)\*?$:匹配water、beer、wine三个基础值,每个值后面可选择加*后缀^soda\([a-z]{0,2}\)\*?$:匹配soda()、soda(a)、soda(ab)这类格式,同样可选择加*后缀^和$确保整个字符串完全匹配,避免出现waterxyz这类部分匹配的无效值
维护说明
如果后续要新增juice这类基础值,只需要在正则的(water|beer|wine)部分里加上|juice就行,不用重构整个规则,灵活性比硬列所有可能值高很多。
内容的提问来源于stack exchange,提问作者BGaraiko
相关产品推荐
相关产品推荐

