今天,我想弄清楚如何在应用程序的后端(NestJS)验证注册表单。我只是想知道是否存在一种方法来验证password
和passwordConfirm
匹配,使用class-validator
包来构建一个自定义验证器或利用提供的验证器。我在考虑类验证器,而不是字段验证器。
// Maybe validator here
export class SignUpDto {
@IsString()
@MinLength(4)
@MaxLength(20)
username: string;
@IsString()
@MinLength(4)
@MaxLength(20)
@Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, {message: 'password too weak'})
password: string;
@IsString()
@MinLength(4)
@MaxLength(20)
passwordConfirm: string;
}
你有什么建议?
6条答案
按热度按时间r1zhe5dt1#
最后我设法解决了密码匹配的问题感谢建议@ChristopheGeers在我的问题的评论:
@piero:如前所述,它还不受支持,但这里有一个示例装饰器(@IsLongerThan):LINK....它检查一个属性是否比另一个属性长。因此,可以将一个属性与另一个属性进行比较。您可以使用此示例创建一个装饰器来完成所需的工作。
以下是我提出的解决方案:
注册日期至ts
匹配.装饰器.ts
xjreopfe2#
下面是一个扩展的例子,它内联了验证器,并为它提供了一个默认消息,这样你就不必每次使用
@IsEqualTo
装饰器时都输入一个消息。58wvjzkj3#
公认的答案对我来说是相当不错的,但我们可能会犯拼写错误,如:
因此,我想对
Generics
进行更严格的定义匹配.装饰.ts
所以我们可以像这样使用
Match
装饰器:wfauudbj4#
我喜欢IsEqualTo装饰器的方法,但我也担心在使用Dto中没有的属性时会出现错别字,因此我以下面的代码结束:
像这样使用它:
kq4fsx7k5#
我喜欢这个公认的答案,但是我认为我们可以简化这个过程,方法是将我们想要验证的属性作为constraints数组中的字符串传递给。
示例:
然后我们可以使用验证器而不需要创建装饰器:
u0sqgete6#
正在最新版本中工作,以便验证长度,我们可以使用它。