我正在寻找一种优雅的方法来检查值是否是JSON模式中的有效正则表达式。到目前为止,我一直满足于要求string
类型:
{
"pattern": { "type": "string" }
}
我想让我的检查更加严格,并且看到pattern
是一个有效的正则表达式:
{
"definitions": {
"regex": {
??? #not another regex -- that was already disproved
}
}
"pattern": { "type": "regex" }
}
通过有效我的意思是检查正则表达式中是否存在语法错误,例如打开括号等等。
我想了一段时间,其中一个可能的解决方案是一个与正则表达式相匹配的正则表达式,但我看到这已经在Regexp that matches valid regexps中已经讨论过了,结果证明这种方法是不可能的。有什么其他方式?我可以想到这可能导致的一些方向,但找不到任何信息。我可以使用模式验证器,例如,以某种方式编译正则表达式?一些验证器是否非正式地支持regex
原始类型?它是否成为JSON Schema v5中的原始类型或某些标准扩展?我可以“掏出”架构并进行检查吗?还是其他什么?
答案 0 :(得分:0)
然后我必须同意Regexp that matches valid regexps中所说的内容 - 这是不可能的。
但是,我想你可以限制允许的正则表达式的复杂性,例如在其中最有限的方式可能是\.\*
只允许正则表达式.*
,直到更复杂但仍然简单的构造。像
^(?:(?:[.\w\s]|\\w|\\d|\\s)(?:\*|\+|{\d+(?:,\d*)?})?)+$
允许使用.*
以及prefix\d+postfix
,\w{1,3}\d+
等内容......
(这意味着作为评论,但可能是一个可能的答案,所以......;)
此致