'use client'; import { useState } from 'react'; import Link from 'next/link'; export default function RegisterPage() { const [formData, setFormData] = useState({ name: '', email: '', password: '', passwordConfirm: '', phone: '', }); const [errors, setErrors] = useState({ name: '', email: '', password: '', passwordConfirm: '', phone: '', }); // 입력 필드 변경 핸들러 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{4}-\d{4}$/; return phoneRegex.test(phone); }; // 폼 제출 전 유효성 검사 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 = '올바른 전화번호 형식이 아닙니다. (예: 010-1234-5678)'; 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); if (value.length > 7) { value = value.slice(0, 3) + '-' + value.slice(3, 7) + '-' + value.slice(7); } else if (value.length > 3) { value = value.slice(0, 3) + '-' + value.slice(3); } setFormData((prev) => ({ ...prev, phone: 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.email && (

{errors.email}

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

{errors.password}

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

{errors.passwordConfirm}

)}
{/* 전화번호 */}
{errors.phone && (

{errors.phone}

)}
{/* 버튼 영역 */}
이전 단계
{/* 카피라이트 */}
Copyright © 2025 XL LMS. All rights reserved
); }