'use client'; import { useState } from 'react'; import Link from 'next/link'; export default function RegisterPage() { const [formData, setFormData] = useState({ name: '', email: '', password: '', passwordConfirm: '', phone: '', gender: 'male', birthDate: '', verificationCode: '', }); const [errors, setErrors] = useState({ name: '', email: '', password: '', passwordConfirm: '', phone: '', birthDate: '', verificationCode: '', }); // 입력 필드 변경 핸들러 const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); // 에러 초기화 if (errors[name as keyof typeof errors]) { setErrors((prev) => ({ ...prev, [name]: '', })); } }; // 이메일 유효성 검사 const validateEmail = (email: string) => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; // 비밀번호 유효성 검사 (최소 8자, 영문/숫자 조합) const validatePassword = (password: string) => { return password.length >= 8 && /[a-zA-Z]/.test(password) && /[0-9]/.test(password); }; // 전화번호 유효성 검사 (하이픈 없이) const validatePhone = (phone: string) => { if (phone === '') return true; // 선택 항목 const phoneRegex = /^010\d{8}$/; return phoneRegex.test(phone.replace(/[^\d]/g, '')); }; // 폼 제출 전 유효성 검사 const validateForm = () => { const newErrors = { name: '', email: '', password: '', passwordConfirm: '', phone: '', }; let isValid = true; // 이름 검사 if (formData.name.trim() === '') { newErrors.name = '이름을 입력해주세요.'; isValid = false; } // 이메일 검사 if (formData.email.trim() === '') { newErrors.email = '이메일을 입력해주세요.'; isValid = false; } else if (!validateEmail(formData.email)) { newErrors.email = '올바른 이메일 형식이 아닙니다.'; isValid = false; } // 비밀번호 검사 if (formData.password === '') { newErrors.password = '비밀번호를 입력해주세요.'; isValid = false; } else if (!validatePassword(formData.password)) { newErrors.password = '비밀번호는 8자 이상, 영문과 숫자를 포함해야 합니다.'; isValid = false; } // 비밀번호 확인 검사 if (formData.passwordConfirm === '') { newErrors.passwordConfirm = '비밀번호 확인을 입력해주세요.'; isValid = false; } else if (formData.password !== formData.passwordConfirm) { newErrors.passwordConfirm = '비밀번호가 일치하지 않습니다.'; isValid = false; } // 전화번호 검사 (선택 항목) if (formData.phone && !validatePhone(formData.phone)) { newErrors.phone = '올바른 전화번호 형식이 아닙니다. (예: 01012345678)'; isValid = false; } setErrors(newErrors); return isValid; }; // 전화번호 자동 포맷팅 (하이픈 없이) const handlePhoneChange = (e: React.ChangeEvent) => { let value = e.target.value.replace(/[^\d]/g, ''); if (value.length > 11) value = value.slice(0, 11); setFormData((prev) => ({ ...prev, phone: value, })); }; // 인증번호 전송 핸들러 const handleSendVerificationCode = () => { if (!formData.email || !validateEmail(formData.email)) { setErrors((prev) => ({ ...prev, email: '올바른 이메일을 입력해주세요.', })); return; } // TODO: 인증번호 전송 API 호출 alert('인증번호가 전송되었습니다.'); }; // 생년월일 핸들러 const handleBirthDateChange = (e: React.ChangeEvent) => { setFormData((prev) => ({ ...prev, birthDate: e.target.value, })); }; // 폼 제출 핸들러 const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (validateForm()) { // 회원가입 완료 페이지로 이동 // 실제로는 API 호출을 하여 회원가입 처리를 해야 합니다 window.location.href = '/registercomplete'; } }; // 필수 항목 입력 여부 확인 const canProceed = formData.name.trim() !== '' && formData.email.trim() !== '' && formData.password !== '' && formData.passwordConfirm !== ''; return (
{/* 제목 */}

회원가입

{/* 단계 표시 */}

01

약관 동의

>

02

회원정보입력

>

03

회원가입완료

{/* 회원정보 입력 폼 */}
{/* 이름 */}
{errors.name && (

{errors.name}

)}
{/* 휴대폰 */}
{errors.phone && (

{errors.phone}

)}
{/* 아이디(이메일) */}
{errors.email && (

{errors.email}

)}
{/* 비밀번호 */}
{errors.password && (

{errors.password}

)}
{/* 비밀번호 확인 */}
{errors.passwordConfirm && (

{errors.passwordConfirm}

)}
{/* 성별 */}
{/* 생년월일 */}
{errors.birthDate && (

{errors.birthDate}

)}
{/* 버튼 영역 */}
이전
{/* 카피라이트 */}

Copyright ⓒ 2025 XL LMS. All rights reserved

); }