如何确保至少一个字段不为空?(如果只有一个不为空,则可以)

时间:2019-06-30 17:22:22

标签: node.js nestjs class-validator

我正在为我正在使用的api写一个注册端点,并且我正在使用nestjs和class-validator来验证输入数据。 用户可以使用他们的电话号码或电子邮件地址或两者进行注册。因此,为了验证输入,我应该确保至少提供了其中之一。但是我很难弄清楚如何做而不弄乱。

这是我的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
}

如您所见,我使用了条件验证,这种验证适用于仅提供电话号码或电子邮件地址之一的情况。但是问题在于,如果同时提供了两者,则其中的一个将不被验证,并且将允许使用无效的值。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为您只需要添加

@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 = '';