如何使Joi验证空白/空白字符串失败?

时间:2020-05-05 11:20:53

标签: node.js express validation joi

我希望Joi拒绝“”或“”之类的字符串,我该如何实现?

3 个答案:

答案 0 :(得分:0)

使用trimmin

const schema = Joi
  .string()
  .trim()
  .min(1)
  .required();

测试:

console.log(schema.validate(' ')); // "value" is not allowed to be empty
console.log(schema.validate('')); // "value" is not allowed to be empty
console.log(schema.validate('  foo')); // value: 'foo'
console.log(schema.validate('foo  ')); // value: 'foo'

答案 1 :(得分:0)

如果要防止空字符串

Joi.string().required().min(1)

答案 2 :(得分:0)

用例

有一个验证 csv 文件的案例(通过 Papa Parse),并且要求 Joi 详细地失败 trim() 验证。 trim() 的正常行为是修复空格,这是明智的。

我们希望通过 trim() 验证错误,而不是自动修复

示例

默认

结果:没有详细错误/通过验证/修剪空格
const schema1 = Joi.object({ username: Joi.string().trim() })
const hasValidationError1 = schema1.validate({ username: ' aslezak ' })

// hasValidationError1 { value: { username: 'aslezak' } }

覆盖

结果:显式详细错误/验证失败/需要在 csv 中修复修剪并重新处理
const schema2 = Joi.object({ username: Joi.string().trim() })
const hasValidationError2 = schema2.validate(
{ username: ' aslezak ' },
{ abortEarly: false, convert: false, label: ['path', 'key', true] }
)

// hasValidationError2 = {
// value: { username: ' aslezak ' },
// error: { ValidationError: [ `"username" must not have leading or trailing whitespace.` ] },
// }

在 joi.dev 文档中引用 validate() 方法有助于确定配置选项。

API 文档

https://joi.dev/api/?v=17.4.0#anyvalidatevalue-options