如何在JSON Schema模式的禁用字符集中添加句号?
解决JSON Schema中添加句号到禁用字符集的问题
首先明确:在正则的否定字符集[^...]中,.是普通字符,不需要转义——只有在字符集外,.才是匹配任意字符的通配符。
错误原因分析
- 第一次尝试的
"pattern": "[^.\"{}:, \t]+"如果是写在JSON格式的Schema里,本身是合法的JSON语法(\"正确转义了双引号),出现解析错误大概率是编辑器或JSON校验工具的误判,或是编写时漏写了其他语法元素(比如逗号、括号)。 - 第二次尝试的
"pattern": "[^\\.\"{}:, \t]+"在JSON中会被解析成正则[^.\"{}:, \t]+,和第一次的正则逻辑完全一致,因为字符集里的\.等价于.,所以验证效果没变化是正常的。
正确写法
情况1:JSON格式的Schema
直接在否定字符集中添加.即可,注意双引号必须转义:
"pattern": "[^.\"{}:, \t]+"
这个模式会匹配不包含.、"、{、}、:、,、空格、制表符的字符串,也就是这些字符都属于禁用范围。
情况2:YAML格式的Schema
如果你的JSON Schema是用YAML编写的,分两种字符串写法:
- 双引号字符串:需要转义双引号,
.直接写:pattern: "[^.\"{}:, \t]+" - 单引号字符串:无需转义双引号,写法更简洁:
pattern: '[^."{}:, \t]+'
验证逻辑确认
确保你的Schema中pattern的使用逻辑正确:这个模式要求被验证的字符串完全由非禁用字符组成,如果字符串中包含.或其他禁用字符,ajv会抛出验证错误。如果你的需求是允许句号、禁用其他字符,那应该把.从否定字符集中移除,而非添加——这点要注意和你的需求匹配。
内容的提问来源于stack exchange,提问作者Setjmp
相关产品推荐
相关产品推荐

