Joi 验证模式 - 两个字段不得具有相同的值

编程代码

2个回答

写回答

阿叁

2025-09-17 17:45

+ 关注

JS
JS

Joi是一种常用的Node.JS库,用于验证和验证用户输入的数据。它提供了一种简单而强大的方式来定义验证规则,并将其应用于数据对象。在本文中,我们将重点介绍Joi验证模式中的一个重要概念:确保两个字段不具有相同的值。

在某些情况下,我们希望确保两个字段的值在用户输入时不相同。例如,在注册表单中,我们可能要求用户输入两次密码以进行确认。为了确保用户输入的两个密码字段不相同,我们可以使用Joi验证模式中的ref方法。

首先,我们需要安装Joi库。可以通过运行以下命令来完成安装:

npm install joi

接下来,我们可以使用Joi验证模式来定义我们的验证规则。以下是一个使用Joi验证模式确保两个字段不具有相同值的示例代码:

Javascript

const Joi = require('joi');

const schema = Joi.object({

password: Joi.string().required(),

confirmPassword: Joi.string().valid(Joi.ref('password')).required()

});

const data = {

password: '123456',

confirmPassword: '123456'

};

const result = schema.validate(data);

console.log(result);

在上面的示例中,我们定义了一个包含两个字段的验证规则对象。password字段使用Joi.string().required()来定义必填的字符串类型,而confirmPassword字段使用Joi.string().valid(Joi.ref('password')).required()来定义必填的字符串类型,并且它的值必须与password字段的值相同。

然后,我们创建了一个包含passwordconfirmPassword字段的数据对象。在这个例子中,我们将两个字段的值都设置为123456,这意味着它们是相同的。

最后,我们使用schema.validate(data)方法对数据对象进行验证。验证的结果将存储在result变量中,并通过console.log(result)输出到控制台。

现在,让我们来看看验证的结果。如果两个字段的值相同,那么验证将通过,并且result.error属性将为undefined。否则,验证将失败,并且result.error属性将包含有关验证错误的详细信息。

案例代码验证结果:

Javascript

{

value: { password: '123456', confirmPassword: '123456' },

error: {

detAIls: [

{

message: '"confirmPassword" must be one of [ref:password]',

path: ['confirmPassword'],

type: 'any.allowOnly',

context: { value: '123456', valids: [Array], key: 'confirmPassword' }

}

],

_original: { password: '123456', confirmPassword: '123456' }

}

}

从验证结果中可以看出,由于passwordconfirmPassword字段的值相同,验证失败并返回了相关的错误信息。

使用Joi验证模式确保两个字段不具有相同的值

在上面的示例中,我们演示了如何使用Joi验证模式来确保两个字段不具有相同的值。通过使用Joi.ref方法,我们可以轻松地定义这样的验证规则。无论是在注册表单还是其他情况下,这个功能都非常有用,因为它可以帮助我们验证用户输入的数据的一致性和完整性。

Joi是一个强大的Node.JS库,用于验证和验证用户输入的数据。在本文中,我们学习了如何使用Joi验证模式确保两个字段不具有相同的值。通过使用Joi.ref方法,我们可以简单而优雅地定义这样的验证规则。无论是在注册表单还是其他情况下,这个功能都可以帮助我们确保用户输入的数据的一致性和完整性。

举报有用(4分享收藏

呀哒

2025-09-18 02:46

+ 关注

在 Joi 验证库中,你可以使用 any().valid()any().invalid() 方法配合 ref() 来实现两个字段不得具有相同的值的验证。不过,Joi 本身并没有直接提供这样的验证模式,你需要通过自定义验证规则来实现。以下是一个示例:

<code>Javascript<br/>const Joi = require('joi'); const schema = Joi.object(  password: Joi.string().required(), confirmPassword: Joi.string() .valid(Joi.ref('password')) .required() .messages(      'any.only': '两次输入的密码必须一致', }) .inverted() .messages(      'any.invert': '两次输入的密码不得相同', }), }); const  error } = schema.validate( password: '123456', confirmPassword: '1234567' }); if (error) console.log(error.detAIls[0].message);</code>
上述代码中,valid(Joi.ref('password')) 用于检查 confirmPassword 是否与 password 相同,inverted() 方法用于反转验证结果,从而实现两个字段不得具有相同的值的验证。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号