일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- revalidatetag
- @tailwind utility
- 자바스크립트
- @tailwind components
- 클로저
- commit phase
- 3진법 뒤집기
- render phase
- sever action
- sever components
- @tailwind base
- unstable_nostore
- iron-session
- 프로그래머스
- SSR
- 리액트
- dynamic pages
- client components
- RECOIL
- createbrowserrouter
- 타입스크립트
- interceptor routes
- supabase realtime
- js
- server components
- @tailwind
- image component
- revalidatepath
- CSS
- static pages
Archives
- Today
- Total
개발하는 너구리
zod 본문
zod 라이브러리는 TypeScript용으로 설계된 데이터 검증 및 스키마 정의 도구로, 강력한 유효성 검사 기능을 제공합니다.
주요 메서드
- z.string()
- 문자열 유형을 나타내는 스키마를 생성합니다.
- 옵션:
- .min(minLength: number, errorMessage: string): 최소 길이를 지정합니다.
- .max(maxLength: number, errorMessage: string): 최대 길이를 지정합니다.
- .regex(regex: RegExp, errorMessage: string): 정규 표현식을 사용하여 문자열을 검사합니다
- z.number()
- 숫자 유형을 나타내는 스키마를 생성합니다.
- 옵션:
- .int(): 정수 값인지 검사합니다.
- .positive(), .negative(), .nonpositive(), .nonnegative(): 숫자의 부호를 검사합니다.
- z.boolean()
- 부울 값 (true 또는 false)을 나타내는 스키마를 생성합니다.
- z.object()
- 객체를 나타내는 스키마를 생성합니다. 각 필드에 대한 유효성 검사를 추가할 수 있습니다.
- z.array()
- 배열을 나타내는 스키마를 생성합니다. 배열 요소에 대한 유효성 검사를 추가할 수 있습니다.
- .refine()
- 사용자 지정 조건에 따라 데이터를 추가로 검증합니다. 검증 실패 시 오류 메시지를 반환합니다.
- .parse() vs .safeParse()
- .parse(): 유효성 검사 실패 시 에러를 throw합니다.
- .safeParse(): 유효성 검사 실패 시 에러를 반환하지 않고, 검증 결과 객체를 반환합니다.
예시 코드
유저네임, 이메일 주소, 비밀번호, confirm password 가 유효한지 검증하는 예시입니다.
'use server';
import { z } from 'zod';
const specialRegex = new RegExp(
/^[^!@#\$%\^&\*\(\)_\+\-\=\{\}\[\]\|\\:;'"<>\?,\.\/`~]*$/
); // []대괄호 안에 있는 특수문자들은 허용하지않는다
const passwordRegex = new RegExp(
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).+$/
); //알파벳 소문자,대문자 / 숫자 / 특수문자 최소 1개씩 포함
const formSchema = z
.object({
username: z
.string({
invalid_type_error: 'Username must be a string.',
required_error: 'Username must be required',
})
.min(3, 'Way too short!!')
.max(10, 'That is too long!')
.toLowerCase()
.trim()
.regex(specialRegex, 'No special characters allowed.'),
// regex() : 첫번째인자로 오는 정규표현식을 통과하지못하면, 두번째인자인 에러메시지를 출력
email: z.string().email().toLowerCase(),
password: z
.string()
.min(10)
.regex(
passwordRegex,
'A password must have lowercase, UPPERCASE, a number and special Characters'
),
confirmPassword: z.string().min(10),
})
.refine((data) => data.password === data.confirmPassword, {
message: 'Both passwords sholud be the same.', // 에러 메시지
path: ['confirmPassword'], // 에러 메시지를 표시할 위치
});
//.refine() : password와 confirmPassoword가 같은지 확인하는 유효성검사
export async function createAccount(prevState: any, formData: FormData) {
const data = {
username: formData.get('username'),
email: formData.get('email'),
password: formData.get('password'),
confirmPassword: formData.get('confirmPassword'),
};
const result = formSchema.safeParse(data);
if (!result.success) {
return result.error.flatten();
} else {
console.log('result::', result.data);
}
}
// .parse() : 유효성검사 실패 시 throw error -> try catch와 함께 사용
// .safeParse() : throw error ❌, 결과(객체)를 반환 -> 반환값을 변수에 저장하여 사용
// .flatten() : error의 내용을 보기좋게 변형
'TIL' 카테고리의 다른 글
bcrypt, iron-session (0) | 2024.07.02 |
---|---|
prisma (0) | 2024.07.02 |
@tailwind (0) | 2024.06.27 |
tailwind css modifier (0) | 2024.06.26 |
Server Components (0) | 2024.06.25 |