模式中具有转义字符的JSON(模式)验证失败

aak*_*aki 9 validation json escaping

以下JSON对象有效:

{
    "foo": "bar",
    "pattern": "^(\/?[-a-zA-Z0-9_.]+)+$"
}
Run Code Online (Sandbox Code Playgroud)

而这不是:

{
    "foo": "bar",
    "pattern": "^(\/?[-a-zA-Z0-9_.]+)+\.jpg$"
}
Run Code Online (Sandbox Code Playgroud)

这是转义的dot(\.),但我不明白为什么这不应该是有效的JSON.我需要在真正的JSON模式中包含这些模式.正则表达式要复杂得多,并且没有办法错过重点,特别是点.

BTW,逃避角色类中的大肆宣传,例如在休息验证中.[a-z\-]

我该如何解决这个问题?

编辑:我用http://jsonlint.com/,http://jsonvalidator.mytechlabs.com/和几个节点库.

eva*_*nal 10

你需要在这里双重逃脱.斜杠是json中的转义字符,所以你不能逃避点(因为它看到它),而你需要转义反斜杠所以你的正则表达式\.就像它应该的那样(json期望在转义后保留一个字符,即a引用或其他斜线或其他东西).

// passes validation
{
    "foo": "bar",
    "pattern": "^(/?[-a-zA-Z0-9_.]+)+\\.jpg$"
}
Run Code Online (Sandbox Code Playgroud)