Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 31 32 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { z } from 'zod';
export const loginSchema = z.object({
email: z
.email('올바른 이메일 형식이 아닙니다.')
.max(50, '이메일은 최대 50자까지 입력할 수 있습니다.'),
password: z.string().min(1, '비밀번호를 입력해주세요'),
});
export const signupSchema = loginSchema
.extend({
nickname: z
.string()
.min(2, '닉네임은 2자 이상이어야 합니다.')
.max(14, '닉네임은 14자 이하로 입력해주세요.'),
password: z
.string()
.min(8, '비밀번호는 8자 이상이어야 합니다.')
.regex(/[!@#$%^&*]/, '!, @, #, $, %, ^, &, * 중 1개 이상 포함해야 합니다.')
.regex(/\d/, '숫자를 1개 이상 포함해야 합니다.'),
confirmPassword: z.string().min(1, '확인 비밀번호를 입력해주세요.'),
termsAgreement: z
.boolean()
.refine((v) => v === true, { message: '서비스 이용약관에 동의해주세요.' }),
})
.refine((data) => data.password === data.confirmPassword, {
path: ['confirmPassword'],
message: '비밀번호가 일치하지 않습니다.',
});
export type SignupFormValues = z.infer<typeof signupSchema>;
|