在JSON模式中定义RegEx类型

时间:2015-11-26 07:55:25

标签: json regex types schema

我正在寻找一种优雅的方法来检查值是否是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中的原始类型或某些标准扩展?我可以“掏出”架构并进行检查吗?还是其他什么?

1 个答案:

答案 0 :(得分:0)

然后我必须同意Regexp that matches valid regexps中所说的内容 - 这是不可能的

但是,我想你可以限制允许的正则表达式的复杂性,例如在其中最有限的方式可能是\.\*只允许正则表达式.*,直到更复杂但仍然简单的构造。像

^(?:(?:[.\w\s]|\\w|\\d|\\s)(?:\*|\+|{\d+(?:,\d*)?})?)+$

允许使用.*以及prefix\d+postfix\w{1,3}\d+等内容......

(这意味着作为评论,但可能是一个可能的答案,所以......;)

此致