为合并的字段值添加最小长度条件

时间:2018-07-09 07:03:20

标签: json jsonschema json-schema-validator

我的表单中有一个名字和姓氏字段,我需要执行一个规则,即名字和姓氏的总长度应至少为4个字符。在JSON模式v4验证程序中有可能吗?我的JSON看起来像这样:

{
    "first_name" : "Fo",
    "last_name"  : "L",
    .....
}

我无法在表单中保留full_name字段-它必须是first_name和last_name两个单独的字段。我知道一种方法是将后端的名字和姓氏连接起来,然后像这样使用验证器:

$full_name = $first_name + $last_name;
--------------------------------------
"full_name": {
        "type": "string",
        "error_code": "incorrect_length",
        "anyOf": [
            { "minLength": 4 },
            { "maxLength": 0 }
        ]
    },

但是,我正在寻找一种无需创建虚拟full_name字段的方法。可以仅使用first_name和last_name字段进行验证吗?

1 个答案:

答案 0 :(得分:1)

这可以通过JSON模式实现,尽管不是很好,但最好在后端进行。没有关键字可以实现这一点,因此您必须使用oneOf并涵盖如下有效情况:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "oneOf": [
    {
      "properties": {
        "first_name": {
          "minLength": 1
        },
        "last_name": {
          "minLength": 3
        }
      }
    },
    {
      "properties": {
        "first_name": {
          "minLength": 2
        },
        "last_name": {
          "minLength": 2
        }
      }
    },
    {
      "properties": {
        "first_name": {
          "minLength": 3
        },
        "last_name": {
          "minLength": 1
        }
      }
    }
  ]
}