2024. 3. 7. 11:42ใ๐ Library
๊ฐ์
- TS๋ฅผ ์ํ data schema ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- BE์ FE ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํจ
- TS ํ์ ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ , Zod schema๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ
- ์ ๋ ฅ๊ฐ์ ์ ํจ์ฑ์ ํ์ธํ๊ณ ์๋ฌ ๋ฉ์์ง ์ ๊ณต
์ฌ์ฉ
- src/validator ๋๋ ํ ๋ฆฌ์ .ts ํ์ผ์์ฑ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ import ํ์, ์๋ฌ๋ฉ์์ง ๋ฐ ๋ฐ์ดํฐ ์ ํจ ํ์ ์์ฑ
import { z } from "zod";
const passwordRegex =
/^(?=.[a-zA-Z])(?=.*\d)(?=.[@$!%?&])[A-Za-z\d@$!%?&]{8,}$/;
const phoneRegex = /^010\d{8}$/;
export const registerSchema = z.object({
email: z.string().email({ message: "์ฌ๋ฐ๋ฅธ ์ด๋ฉ์ผ์ ์
๋ ฅํด์ฃผ์ธ์." }),
phone: z
.string()
.min(11, "์ฐ๋ฝ์ฒ๋ 11์๋ฆฌ์ฌ์ผ ํฉ๋๋ค.")
.max(11, "์ฐ๋ฝ์ฒ๋ 11์๋ฆฌ์ฌ์ผ ํฉ๋๋ค.")
.refine(
(value) => phoneRegex.test(value),
"010์ผ๋ก ์์ํ๋ 11์๋ฆฌ ์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์",
),
username: z
.string()
.min(2, { message: "์ด๋ฆ์ 2๊ธ์ ์ด์์ด์ด์ผ ํฉ๋๋ค." })
.max(100, { message: "์ด๋ฆ์ 100๊ธ์ ์ดํ์ด์ด์ผ ํฉ๋๋ค." }),
role: z.string().min(2, { message: "์ญํ ์ ์ ํํด์ฃผ์ธ์." }),
password: z
.string()
.min(6, "๋น๋ฐ๋ฒํธ๋ ์ต์ 6์๋ฆฌ ์ด์์ด์ด์ผ ํฉ๋๋ค.")
.max(100, "๋น๋ฐ๋ฒํธ๋ 100์๋ฆฌ ์ดํ์ด์ด์ผ ํฉ๋๋ค.")
.refine(
(value) => passwordRegex.test(value),
"๋น๋ฐ๋ฒํธ๋ ์ต์ 6์๋ฆฌ ์ด์, ์๋ฌธ, ์ซ์, ํน์๋ฌธ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.",
),
confirmPassword: z
.string()
.min(6, "๋น๋ฐ๋ฒํธ๋ ์ต์ 6์๋ฆฌ ์ด์์ด์ด์ผ ํฉ๋๋ค.")
.max(100, "๋น๋ฐ๋ฒํธ๋ 100์๋ฆฌ ์ดํ์ด์ด์ผ ํฉ๋๋ค.")
.refine(
(value) => passwordRegex.test(value),
"๋น๋ฐ๋ฒํธ๋ ์ต์ 6์๋ฆฌ ์ด์, ์๋ฌธ, ์ซ์, ํน์๋ฌธ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.",
),
});
```
'๐ Library' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Library] Zustand (0) | 2024.03.19 |
---|---|
[Library] react-hook-form (0) | 2024.03.07 |
[Library] [shadcn/ui] (0) | 2024.03.04 |
[Library]lodash์ ๋ํ์ฌ (0) | 2023.04.27 |