ERP-node/frontend/lib/utils/validation.ts

93 lines
2.8 KiB
TypeScript

/**
* 공통 폼 유효성 검증 + 자동 포맷팅 유틸리티
*/
// --- 자동 포맷팅 ---
// 전화번호: 숫자만 추출 → 자동 하이픈
// 010-1234-5678 / 02-1234-5678 / 031-123-4567
export function formatPhone(value: string): string {
const nums = value.replace(/\D/g, "").slice(0, 11);
if (nums.startsWith("02")) {
if (nums.length <= 2) return nums;
if (nums.length <= 5) return `${nums.slice(0, 2)}-${nums.slice(2)}`;
if (nums.length <= 9) return `${nums.slice(0, 2)}-${nums.slice(2, 5)}-${nums.slice(5)}`;
return `${nums.slice(0, 2)}-${nums.slice(2, 6)}-${nums.slice(6)}`;
}
if (nums.length <= 3) return nums;
if (nums.length <= 7) return `${nums.slice(0, 3)}-${nums.slice(3)}`;
return `${nums.slice(0, 3)}-${nums.slice(3, 7)}-${nums.slice(7)}`;
}
// 사업자번호: 000-00-00000
export function formatBusinessNumber(value: string): string {
const nums = value.replace(/\D/g, "").slice(0, 10);
if (nums.length <= 3) return nums;
if (nums.length <= 5) return `${nums.slice(0, 3)}-${nums.slice(3)}`;
return `${nums.slice(0, 3)}-${nums.slice(3, 5)}-${nums.slice(5)}`;
}
// 필드명으로 자동 포맷팅
export function formatField(fieldName: string, value: string): string {
switch (fieldName) {
case "contact_phone":
case "phone":
case "cell_phone":
return formatPhone(value);
case "business_number":
return formatBusinessNumber(value);
default:
return value;
}
}
// --- 유효성 검증 ---
export function validatePhone(value: string): string | null {
if (!value) return null;
const nums = value.replace(/\D/g, "");
if (nums.length < 9) return "전화번호를 끝까지 입력해주세요";
return null;
}
export function validateEmail(value: string): string | null {
if (!value) return null;
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) return "올바른 이메일 형식이 아닙니다";
return null;
}
export function validateBusinessNumber(value: string): string | null {
if (!value) return null;
const nums = value.replace(/\D/g, "");
if (nums.length < 10) return "사업자번호를 끝까지 입력해주세요";
return null;
}
export function validateField(fieldName: string, value: string): string | null {
if (!value) return null;
switch (fieldName) {
case "contact_phone":
case "phone":
case "cell_phone":
return validatePhone(value);
case "email":
return validateEmail(value);
case "business_number":
return validateBusinessNumber(value);
default:
return null;
}
}
export function validateForm(
data: Record<string, any>,
fields: string[]
): Record<string, string> {
const errors: Record<string, string> = {};
for (const field of fields) {
const error = validateField(field, data[field] || "");
if (error) errors[field] = error;
}
return errors;
}