Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 28 additions & 27 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,33 +99,34 @@ app.listen(3000)

### 검증 데코레이터

| 데코레이터 | 설명 | 예시 |
|--------------------------------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| `@optional()` | 값이 없는 경우 밸리데이션을 하지 않음 | `@optional() value?: number` |
| `@Min(minimum: number)` | 숫자가 `minimum` 이상이어야 함 | `@Min(18) age!: number` |
| `@Max(maximum: number)` | 숫자가 `maximum` 이하이어야 함 | `@Max(100) score!: number` |
| `@Range(min: number, max: number)` | 숫자가 `min` 이상 `max` 이하 범위에 포함되어야 함 | `@Range(1, 5) rating!: number` |
| `@Prefix(prefixText: string)` | 문자열이 `prefixText` 로 시작해야 함 | `@Prefix('IMG_') fileName!: string` |
| `@Suffix(suffixText: string)` | 문자열이 `suffixText` 로 끝나야 함 | `@Suffix('.jpg') fileName!: string` |
| `@Length(value: number)` | 문자열 길이가 정확히 `value` 여야 함 | `@Length(6) otp!: string` |
| `@MinLength(min: number)` | 문자열 길이가 `min` 이상이어야 함 | `@MinLength(8) password!: string` |
| `@MaxLength(max: number)` | 문자열 길이가 `max` 이하이어야 함 | `@MaxLength(20) username!: string` |
| `@Equal(value: any)` | 값이 `value` 와 정확히 일치해야 함 | `@Equal('production') env!: string` |
| `@NotEqual(value: any)` | 값이 `value` 와 달라야 함 | `@NotEqual('admin') role!: string` |
| `@IsTrue()` | 값이 `true` 여야 함 | `@IsTrue() acceptedTerms!: boolean` |
| `@IsFalse()` | 값이 `false` 여야 함 | `@IsFalse() blocked!: boolean` |
| `@OneOf(options: readonly any[])` | 값이 `options` 중 하나여야 함 | `@OneOf(['credit','debit'] as const) method!: 'credit' \| 'debit'` |
| `@Enum(enumObj: object, message?)` | 값이 `enumObj`의 멤버여야 함 | `@Enum(UserRole) role!: UserRole` |
| `@Validate(validateFn, message?)` | 커스텀 검증 함수를 사용 | `@Validate(v => typeof v === 'string' && v.includes('@'), 'invalid email') email!: string` |
| `@Regexp(pattern: RegExp, message?)` | 문자열이 주어진 정규식을 만족해야 함 | `@Regexp(/^[0-9]+$/, 'digits only') phone!: string` |
| `@Email()` | 값이 이메일 형식이어야 함 | `@Email() email!: string` |
| `@Uuid(version?, message?)` | 값이 유효한 UUID 형식이어야 하며, 선택적으로 특정 버전(v1, v3, v4, v5)으로 제한할 수 있습니다. | `@Uuid('v4') requestId!: string` |
| `@Alpha(message?: string)` | 문자열에 알파벳(A–Z, a–z)만 포함되어야 합니다. | @Alpha() firstName!: string |
| `@Alphanumeric(message?: string)` | 필드에 알파벳과 숫자(A-Z, a-z, 0-9)만 포함되어야 합니다. | `@Alphanumeric() productCode!: string` |
| `@IsUppercase(message?: string)` | 필드에 대문자만 포함되어야 합니다. | `@IsUppercase() countryCode!: string` |
| `@IsLowercase(message?: string)` | 필드에 소문자만 포함되어야 합니다. | `@IsLowercase() username!: string` |
| `@With(fieldName: string)` | 데코레이터가 적용된 필드에 값이 있을 경우, 지정된 대상 필드 (fieldName)도 반드시 값을 가져야 함을 검증하여, 두 필드 간의 필수적인 의존 관계를 설정합니다. | `@With('price') discountRate?: number` |
| `@Without(fieldName: string)` | 데코레이터가 선언된 필드에 값이 있을 경우, 지정된 타겟 필드(fieldName)는 반드시 값이 없어야 함을 검증하여 상호 배타적 관계를 설정합니다. | `@Without('isGuest') password?: string` |
| 데코레이터 | 설명 | 예시 |
|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| `@optional()` | 값이 없는 경우 밸리데이션을 하지 않음 | `@optional() value?: number` |
| `@Min(minimum: number)` | 숫자가 `minimum` 이상이어야 함 | `@Min(18) age!: number` |
| `@Max(maximum: number)` | 숫자가 `maximum` 이하이어야 함 | `@Max(100) score!: number` |
| `@Range(min: number, max: number)` | 숫자가 `min` 이상 `max` 이하 범위에 포함되어야 함 | `@Range(1, 5) rating!: number` |
| `@Prefix(prefixText: string)` | 문자열이 `prefixText` 로 시작해야 함 | `@Prefix('IMG_') fileName!: string` |
| `@Suffix(suffixText: string)` | 문자열이 `suffixText` 로 끝나야 함 | `@Suffix('.jpg') fileName!: string` |
| `@Length(value: number)` | 문자열 길이가 정확히 `value` 여야 함 | `@Length(6) otp!: string` |
| `@MinLength(min: number)` | 문자열 길이가 `min` 이상이어야 함 | `@MinLength(8) password!: string` |
| `@MaxLength(max: number)` | 문자열 길이가 `max` 이하이어야 함 | `@MaxLength(20) username!: string` |
| `@Equal(value: any)` | 값이 `value` 와 정확히 일치해야 함 | `@Equal('production') env!: string` |
| `@NotEqual(value: any)` | 값이 `value` 와 달라야 함 | `@NotEqual('admin') role!: string` |
| `@IsTrue()` | 값이 `true` 여야 함 | `@IsTrue() acceptedTerms!: boolean` |
| `@IsFalse()` | 값이 `false` 여야 함 | `@IsFalse() blocked!: boolean` |
| `@OneOf(options: readonly any[])` | 값이 `options` 중 하나여야 함 | `@OneOf(['credit','debit'] as const) method!: 'credit' \| 'debit'` |
| `@ArrayContains(values: any[], comparator?: (expected, actual) => boolean)` | 배열이 지정된 모든 값을 포함해야 함. `comparator` 제공 시 모든 비교를 위임 | `@ArrayContains([1, 2]) nums!: number[]` |
| `@Enum(enumObj: object, message?)` | 값이 `enumObj`의 멤버여야 함 | `@Enum(UserRole) role!: UserRole` |
| `@Validate(validateFn, message?)` | 커스텀 검증 함수를 사용 | `@Validate(v => typeof v === 'string' && v.includes('@'), 'invalid email') email!: string` |
| `@Regexp(pattern: RegExp, message?)` | 문자열이 주어진 정규식을 만족해야 함 | `@Regexp(/^[0-9]+$/, 'digits only') phone!: string` |
| `@Email()` | 값이 이메일 형식이어야 함 | `@Email() email!: string` |
| `@Uuid(version?, message?)` | 값이 유효한 UUID 형식이어야 하며, 선택적으로 특정 버전(v1, v3, v4, v5)으로 제한할 수 있습니다. | `@Uuid('v4') requestId!: string` |
| `@Alpha(message?: string)` | 문자열에 알파벳(A–Z, a–z)만 포함되어야 합니다. | @Alpha() firstName!: string |
| `@Alphanumeric(message?: string)` | 필드에 알파벳과 숫자(A-Z, a-z, 0-9)만 포함되어야 합니다. | `@Alphanumeric() productCode!: string` |
| `@IsUppercase(message?: string)` | 필드에 대문자만 포함되어야 합니다. | `@IsUppercase() countryCode!: string` |
| `@IsLowercase(message?: string)` | 필드에 소문자만 포함되어야 합니다. | `@IsLowercase() username!: string` |
| `@With(fieldName: string)` | 데코레이터가 적용된 필드에 값이 있을 경우, 지정된 대상 필드 (fieldName)도 반드시 값을 가져야 함을 검증하여, 두 필드 간의 필수적인 의존 관계를 설정합니다. | `@With('price') discountRate?: number` |
| `@Without(fieldName: string)` | 데코레이터가 선언된 필드에 값이 있을 경우, 지정된 타겟 필드(fieldName)는 반드시 값이 없어야 함을 검증하여 상호 배타적 관계를 설정합니다. | `@Without('isGuest') password?: string` |

---

Expand Down
Loading
Loading