class-validator 不区分大小写的枚举验证?

class-validator case-insensitive enum validation?

我有这样的 anum:

export enum UserRole {
  USER,
  ADMIN,
  BLOGGER
}

和create.user.dto喜欢这样

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;
}

现在,如果我只 post 大写角色('ADMIN','USER')或 'BLOGGER'。

,角色验证不会失败

如何让class-验证器不区分大小写?我的意思是,也为 'admin' 'aDmIn'.

验证 true

那么您需要通过 @Matches.

进行正则表达式验证
  @IsOptional()
  @Matches(`^${Object.values(UserRole).filter(v => typeof v !== "number").join('|')}$`, 'i')
  role: UserRole;

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

你的枚举应该是这样的

export enum UserRole {
  USER = "USER",
  ADMIN = "ADMIN",
  BLOGGER = "BLOGGER"
}

已证明在 case-insensitive 中有效,反之亦然