如何确保至少有一个字段不为空?(如果只有一个字段不为空就可以)
how to make sure at least one field is not empty?(its ok if only one is not empty)
我正在为我正在处理的 api 编写一个注册端点,我正在使用 nestjs 和 class-validator 来验证输入数据。
用户可以使用他们的 phone 号码或电子邮件地址或两者进行注册。因此,为了验证输入,我应该确保至少提供了其中一个。但我很难弄清楚如何在不弄乱的情况下做到这一点。
这是我的 dto:
export class register {
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
firstName: string
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
lastName: string
@ApiModelProperty()
@ValidateIf(o => o.email == undefined)
@IsNotEmpty()
@isIRMobile()
phone: string
@ApiModelProperty()
@ValidateIf(o => o.phone == undefined)
@IsNotEmpty()
@IsEmail()
email: string
@ApiModelProperty()
@IsNotEmpty()
password: string
}
如您所见,我使用了条件验证,它适用于仅提供 phone 号码或电子邮件地址之一的情况。但问题是,当两者都提供时,其中之一将不会被验证,并且将允许无效值。
有什么建议吗?
我想你只需要添加
@ValidateIf(o => o.email == undefined || o.phone)
phone: string
和
@ValidateIf(o => o.phone == undefined || o.email)
email: string
已编辑
一个小补充
我建议这样验证:
@ValidateIf(o => !o.email || o.phone)
phone: string
@ValidateIf(o => !o.phone || o.email)
email: string
正确处理 null、0 和 ""(空字符串)
否则,这也是正确的(不应该是):
const data = new register();
data.phone = '';
data.email = '';
我正在为我正在处理的 api 编写一个注册端点,我正在使用 nestjs 和 class-validator 来验证输入数据。 用户可以使用他们的 phone 号码或电子邮件地址或两者进行注册。因此,为了验证输入,我应该确保至少提供了其中一个。但我很难弄清楚如何在不弄乱的情况下做到这一点。
这是我的 dto:
export class register {
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
firstName: string
@ApiModelProperty()
@IsNotEmpty()
@IsAlpha()
lastName: string
@ApiModelProperty()
@ValidateIf(o => o.email == undefined)
@IsNotEmpty()
@isIRMobile()
phone: string
@ApiModelProperty()
@ValidateIf(o => o.phone == undefined)
@IsNotEmpty()
@IsEmail()
email: string
@ApiModelProperty()
@IsNotEmpty()
password: string
}
如您所见,我使用了条件验证,它适用于仅提供 phone 号码或电子邮件地址之一的情况。但问题是,当两者都提供时,其中之一将不会被验证,并且将允许无效值。
有什么建议吗?
我想你只需要添加
@ValidateIf(o => o.email == undefined || o.phone)
phone: string
和
@ValidateIf(o => o.phone == undefined || o.email)
email: string
已编辑
一个小补充
我建议这样验证:
@ValidateIf(o => !o.email || o.phone)
phone: string
@ValidateIf(o => !o.phone || o.email)
email: string
正确处理 null、0 和 ""(空字符串)
否则,这也是正确的(不应该是):
const data = new register();
data.phone = '';
data.email = '';