【问题标题】:class-validator case-insensitive enum validation?类验证器不区分大小写的枚举验证?
【发布时间】:2020-08-02 07:25:04
【问题描述】:

我有这样的数字:

export enum UserRole {
  USER,
  ADMIN,
  BLOGGER
}

和 create.user.d 一样

import { IsEmail, IsEnum, IsNotEmpty, IsOptional } from 'class-validator';
import { UserRole } from './user.entity';

export class CreateUserDto {
  @IsEmail()
  email: string;

  @IsNotEmpty()
  firstName: string;

  @IsNotEmpty()
  lastName: string;

  @IsOptional()
  username: string;

  @IsOptional()
  @IsEnum(UserRole)
  role: UserRole;

  @IsNotEmpty()
  password: string;
}

现在,如果我只发布角色大写('ADMIN','USER')或'BLOGGER',角色验证不会失败。

如何使类验证器不区分大小写?我的意思是,也为 'admin' 'aDmIn' 验证 true。

【问题讨论】:

  • ENUM 不会这样做,我不认为@IsIn(Array) 不区分大小写,您必须编写自定义验证器,您可以在其中使用此条件array.includes(incoming-value.toLowercase)

标签: node.js enums case-sensitive class-validator


【解决方案1】:

那么您需要通过@Matches 进行正则表达式验证。

  @IsOptional()
  @Matches(`^${Object.values(UserRole).filter(v => typeof v !== "number").join('|')}$`, 'i')
  role: UserRole;

最终规则是/^USER|ADMIN|BLOGGER$/i,其中i 忽略大小写。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多