1. 숫자 관련
@IsInt()
: 정수인지 확인@IsPositive()
: 양수인지 확인@IsNegative()
: 음수인지 확인@Min(value: number)
: 최소값 확인@Max(value: number)
: 최대값 확인@IsNumber(options?: { allowNaN?: boolean, maxDecimalPlaces?: number })
: 숫자인지 확인
class NumberValidationExample {
@IsInt()
age: number;
@IsPositive()
score: number;
@Min(1)
@Max(100)
level: number;
}
2. 문자열 관련
@IsString()
: 문자열인지 확인@Length(min: number, max?: number)
: 문자열 길이 제한@MaxLength(max: number)
: 최대 길이 확인@MinLength(min: number)
: 최소 길이 확인@IsEmail()
: 이메일 형식 확인@Matches(pattern: RegExp, modifiers?: string)
: 정규식 패턴 일치 확인@IsUrl()
: URL 형식 확인@IsUUID(version?: "3" | "4" | "5")
: UUID 형식 확인@IsHexColor()
: HEX 색상 코드 확인@IsLowercase()
: 소문자인지 확인@IsUppercase()
: 대문자인지 확인
class StringValidationExample {
@IsString()
name: string;
@Length(5, 10)
username: string;
@IsEmail()
email: string;
@Matches(/^[a-z0-9]+$/, 'i')
password: string;
}
3. 날짜 관련
@IsDate()
: 날짜 객체인지 확인@MinDate(date: Date)
: 최소 날짜 확인@MaxDate(date: Date)
: 최대 날짜 확인
class DateValidationExample {
@IsDate()
@MinDate(new Date('2024-01-01'))
startDate: Date;
@IsDate()
@MaxDate(new Date('2024-12-31'))
endDate: Date;
}
4. 배열 관련
@IsArray()
: 배열인지 확인@ArrayMinSize(min: number)
: 배열 최소 크기 확인@ArrayMaxSize(max: number)
: 배열 최대 크기 확인@ArrayNotEmpty()
: 배열이 비어 있지 않은지 확인@IsIn(values: any[])
: 배열 값이 지정된 값 중 하나인지 확인@IsNotIn(values: any[])
: 배열 값이 지정된 값 중 하나가 아닌지 확인
class ArrayValidationExample {
@IsArray()
@ArrayMinSize(1)
tags: string[];
@IsIn(['admin', 'user', 'guest'])
role: string;
}
5. 객체 관련
@ValidateNested()
: 중첩된 객체의 유효성 확인@IsDefined()
: 값이 정의되었는지 확인@IsNotEmptyObject(options?: { nullable: boolean })
: 객체가 비어 있지 않은지 확인
class Address {
@IsString()
street: string;
@IsString()
city: string;
}
class User {
@ValidateNested()
@IsDefined()
address: Address;
}
6. 기타
@IsBoolean()
: 값이 Boolean인지 확인@IsOptional()
: 선택적 필드로 처리@IsNotEmpty()
: 값이 비어 있지 않은지 확인@IsEnum(enumType: object)
: 값이 특정 Enum에 속하는지 확인
enum UserRole {
ADMIN = 'admin',
USER = 'user',
}
class MiscValidationExample {
@IsBoolean()
isActive: boolean;
@IsOptional()
@IsString()
nickname?: string;
@IsEnum(UserRole)
role: UserRole;
}
7. 사용자 정의
@Validate(CustomConstraint)
: 사용자 정의 검증 규칙@ValidatorConstraint()
: 커스텀 검증 규칙 작성에 사용
import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';
function IsExactLength(length: number, validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
name: 'isExactLength',
target: object.constructor,
propertyName: propertyName,
constraints: [length],
options: validationOptions,
validator: {
validate(value: any, args: ValidationArguments) {
return typeof value === 'string' && value.length === args.constraints[0];
},
defaultMessage(): string {
return `Length must be exactly ${length} characters`;
},
},
});
};
}
class CustomValidationExample {
@IsExactLength(5, { message: 'Must be exactly 5 characters' })
code: string;
}
728x90
'DEV > Node' 카테고리의 다른 글
[Node] Passport 활용하기 (with. NestJS) (0) | 2024.11.10 |
---|---|
[Node] Custom Validate Decorator 적용하기 (with. NestJS) (0) | 2024.11.07 |
[Node] NestJS 란? (0) | 2023.11.16 |