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 中有效,反之亦然
我有这样的 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 中有效,反之亦然