Использование RegEx в схеме JSON

Попытка написать схему JSON, которая использует RegEx для проверки значения элемента.

Имейте элемент с именем progBinaryName, значение которого должно соответствовать этой строке RegEx "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$".

Не могу найти никаких руководств или примеров, которые действительно объясняют использование RegEx в схеме JSON.

Любая помощь / информация будет очень признательна!

Спасибо д

СХЕМА JSON

{
    "name": "string",
    "properties": {
        "progName": {
            "type": "string",
            "description": "Program Name",
            "required": true
        },
        "ID": {
            "type": "string",
            "description": "Identifier",
            "required": true
        },
        "progVer": {
            "type": "string",
            "description": "Version number",
            "required": true
        },
        "progBinaryName": {
            "type": "string",
            "description": "Actual name of binary",
            "patternProperties": {
                "progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
            },
            "required": true
        }
    }
}

ОШИБКИ:

Предупреждение! Лучше проверьте свой JSON.

Экземпляр не является обязательным типом - http://json-schema.org/draft-03/hyper-schema#


Схема действительна в формате JSON, но не является действительной схемой.


Результаты проверки: сбой

[ {
    "level" : "warning",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : ""
    },
    "domain" : "syntax",
    "message" : "unknown keyword(s) found; ignored",
    "ignored" : [ "name" ]
}, {
    "level" : "error",
    "domain" : "syntax",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : "/properties/ID"
    },
    "keyword" : "required",
    "message" : "value has incorrect type",
    "expected" : [ "array" ],
    "found" : "boolean"
}, {
    "level" : "error",
    "domain" : "syntax",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : "/properties/progBinaryName"
    },
    "keyword" : "required",
    "message" : "value has incorrect type",
    "expected" : [ "array" ],
    "found" : "boolean"
}, {
    "level" : "error",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : "/properties/progBinaryName/patternProperties/progBinaryName"
    },
    "domain" : "syntax",
    "message" : "JSON value is not a JSON Schema: not an object",
    "found" : "string"
}, {
    "level" : "error",
    "domain" : "syntax",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : "/properties/progName"
    },
    "keyword" : "required",
    "message" : "value has incorrect type",
    "expected" : [ "array" ],
    "found" : "boolean"
}, {
    "level" : "error",
    "domain" : "syntax",
    "schema" : {
        "loadingURI" : "#",
        "pointer" : "/properties/progVer"
    },
    "keyword" : "required",
    "message" : "value has incorrect type",
    "expected" : [ "array" ],
    "found" : "boolean"
} ]

Problem with schema#/properties/progBinaryName/patternProperties/progBinaryName : Instance is not a required type
Reported by http://json-schema.org/draft-03/hyper-schema#
Attribute "type" (["object"])

person Destroyer    schedule 10.05.2013    source источник
comment
Что не работает? (Вы можете поставить этот дефис в конце класса символов)   -  person Martin Ender    schedule 11.05.2013
comment
Любая онлайн-проверка не работает.   -  person Destroyer    schedule 11.05.2013
comment
Что значит не работает? Получаете ложные срабатывания? Вы получаете ложноотрицательные результаты? У вас какая-то ошибка?   -  person Martin Ender    schedule 11.05.2013
comment
Проверка завершается ошибкой. json-schema-validator.herokuapp.com/syntax.jsp jsonschemavalidator.herokuapp.com jsonschemalint.com Слишком много, чтобы перечислить.   -  person Destroyer    schedule 11.05.2013
comment
Вам не кажется, что потенциальным ответчикам может помочь включение этих сообщений об ошибках в вопрос?   -  person Martin Ender    schedule 11.05.2013
comment
Пример репозитория github.com/rofrol/ajv-regexp-errormessage-example   -  person rofrol    schedule 11.01.2021


Ответы (2)


Чтобы проверить строковое значение (а не имя свойства) на соответствие RegEx, вы должны использовать ключевое слово "pattern":

{
    "type": "object",
    "properties": {
        "progBinaryName": {
            "type": "string",
            "pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
        }
    }
}

P.S. - если вы хотите, чтобы шаблон соответствовал ключу свойства (а не значению), тогда вы должны использовать "patternProperties" (это похоже на "properties", но ключ является RegEx).

person cloudfeet    schedule 18.07.2013
comment
Возможно ли сопоставление с образцом без учета регистра? - person Ninja; 10.07.2018
comment
@Ninja кажется, что это можно сделать только с помощью правильно спроектированного регулярного выражения. Проверьте json-schema.org/understanding-json-schema/reference/ - использование флагов выходит за рамки рекомендованного синтаксиса RegExp для схемы JSON по причинам совместимости. - person PsychoFish; 16.11.2018
comment
@Ninja для нечувствительности к cace посмотрите на stackoverflow.com/questions/41874810/ - person rofrol; 11.01.2021

Ваш синтаксис схемы JSON неверен. Изменять

"patternProperties": {
    "progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
    }

to

"patternProperties": {
    "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$": {}
    }
person Lodewijk Bogaards    schedule 11.05.2013
comment
Спасибо, что ответили и не тратили мое время зря. Очень, очень признателен! - person Destroyer; 22.05.2013
comment
Разве вопрос не был в тестировании значения, а не имени свойства? - person cloudfeet; 18.07.2013