【问题标题】:how to make sure at least one field is not empty?(its ok if only one is not empty)如何确保至少一个字段不为空?(如果只有一个不为空就可以)
【发布时间】:2019-11-11 13:57:04
【问题描述】:

我正在为我正在处理的 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
}

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

有什么建议吗?

【问题讨论】:

    标签: node.js nestjs class-validator


    【解决方案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
    

    正确处理null0""(空字符串)

    否则,这也是正确的(不应该如此):

    const data = new register();
    data.phone = '';
    data.email = '';
    

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2021-08-12
      相关资源
      最近更新 更多