string - 检查 Joi (hapi.js) 中的空字符串

标签 string validation joi

我使用 Hapi.js 框架和 Joi 进行数据验证。我正在尝试使用 Joi 验证 JSON 文件。我已经定义了一个架构,并想检查 JSON 文件是否包含我的架构中的所有字段。

某些字符串字段可以为空。在我的架构文件中,当我将 min 定义为 0 时,它表示 name 是必填字段。

我正在使用以下架构:

    module.exports = {
      "name": { "type": "string", "min": 0, "max": 30},
      "age": { "type": "number", "min": 1, "max": 36},
      "dob": { "type": "string", "min": 0, "max": 100 }
    }

如何修改此架构以处理空字符串?

最佳答案

如果您想允许空字符串,则需要使用 joi.string().allow('') 显式允许它们。

var joi = require('joi');

var schema = joi.object().keys({
    name: joi.string().min(0).allow('').allow(null),
    age: joi.number().min(1).max(36),
    dob: joi.string().min(0).max(100)
});

var obj = {
    name: '',
    age: '18',
    dob: '11/11/2998'
};

var result = joi.validate(obj, schema);

console.log(JSON.stringify(result, null, 2));

使用joi.describe后上述模式的输出是:

{
  "type": "object",
  "children": {
    "name": {
      "type": "string",
      "valids": [
        "",
        null
      ],
      "rules": [
        {
          "name": "min",
          "arg": 0
        }
      ]
    },
    "age": {
      "type": "number",
      "invalids": [
        null,
        null
      ],
      "rules": [
        {
          "name": "min",
          "arg": 1
        },
        {
          "name": "max",
          "arg": 36
        }
      ]
    },
    "dob": {
      "type": "string",
      "invalids": [
        ""
      ],
      "rules": [
        {
          "name": "min",
          "arg": 0
        },
        {
          "name": "max",
          "arg": 100
        }
      ]
    }
  }
}

关于string - 检查 Joi (hapi.js) 中的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765267/

相关文章:

Javascript 替换并 $ 符号在 newSubStr 中

python - 两个字符串之间最长匹配序列的正则表达式

c# - 验证在 MVC 4 项目中不起作用

php - 电子邮件地址验证方法(订阅按钮)

javascript - 如何使我的错误发布在我的保留部分中?

node.js - 从文件加载 Joi 模式

java - 在 Java 中将字符串转换为 UTF-16 表示形式

用于获取字符串的 Java Date 对象构造函数已弃用

Joi 验证嵌套模式的各个字段

node.js - Nodejs - Joi 检查字符串是否在给定列表中