34

我在我的项目中使用 "joi": "10.0.6" 和 "express-validation": "1.0.1" 来验证我将保存在数据库中的 JSON 对象。其中一个字段是字符串,但它可以为 null 或空。在字符串为空或 null 的情况下,如何允许我的字符串通过验证?

我已经尝试过这些案例:

dataId: Joi.string().allow(null).allow('').optional()

dataId: Joi.alternatives().try(Joi.string(), Joi.allow(null))

但它们都不起作用。

4

6 回答 6

56

您也可以使用逗号分隔的列表来指定它。

dataId: Joi.string().allow(null, '')

请参阅有关 allow(value) 的 Joi 文档

于 2018-03-30T21:07:59.930 回答
14

这很简单,假设该字段是数据,那么您可以将验证强加为

data: Joi.string().allow('')

允许空字符串通过,对于多个字符串验证,它也可以作为

data: Joi.string().allow('', null)

允许数据字段的空值和空值通过。

于 2019-02-23T19:35:48.927 回答
4

Joi.string().allow('').allow(null)应该工作。我在本地测试过,效果很好。

显示您的测试用例和错误?

于 2017-03-19T18:41:39.737 回答
3

如果您想允许空字符串并将其视为未定义(即,将其转换为未定义),则使用 Joi 的empty方法

data: Joi.string().empty('')
于 2021-04-05T14:10:39.983 回答
2

如果您只是将其指定为

dataId: Joi.string()

默认情况下它应该是可选的。

编辑:目前无法自己尝试。如果上述方法不起作用,这里有一个替代方法:

dataId: Joi.string().min(0).allow('').allow(null)
于 2017-02-21T15:13:10.280 回答
1

如果您只需要 null 或空字符串,请使用:

 dataId: Joi.string().valid(null, '')
于 2021-02-15T09:38:17.330 回答