class Validators { static String? validateRestaurantName(String? value) { if (value == null || value.trim().isEmpty) { return '맛집 이름을 입력해주세요'; } if (value.trim().length < 2) { return '맛집 이름은 2자 이상이어야 합니다'; } if (value.trim().length > 50) { return '맛집 이름은 50자 이하여야 합니다'; } return null; } static String? validateMemo(String? value) { if (value != null && value.length > 200) { return '메모는 200자 이하여야 합니다'; } return null; } static String? validateLatitude(String? value) { if (value == null || value.isEmpty) { return null; } final lat = double.tryParse(value); if (lat == null) { return '올바른 위도 값을 입력해주세요'; } if (lat < -90 || lat > 90) { return '위도는 -90도에서 90도 사이여야 합니다'; } return null; } static String? validateLongitude(String? value) { if (value == null || value.isEmpty) { return null; } final lng = double.tryParse(value); if (lng == null) { return '올바른 경도 값을 입력해주세요'; } if (lng < -180 || lng > 180) { return '경도는 -180도에서 180도 사이여야 합니다'; } return null; } static String? validateAddress(String? value) { if (value != null && value.length > 100) { return '주소는 100자 이하여야 합니다'; } return null; } static String? validateCategory(String? value) { if (value == null || value.isEmpty) { return '카테고리를 선택해주세요'; } return null; } static String? validateRating(double? value) { if (value != null && (value < 0 || value > 5)) { return '평점은 0에서 5 사이여야 합니다'; } return null; } static bool isValidEmail(String? email) { if (email == null || email.isEmpty) return false; final emailRegex = RegExp( r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', ); return emailRegex.hasMatch(email); } static bool isValidPhoneNumber(String? phone) { if (phone == null || phone.isEmpty) return false; final phoneRegex = RegExp(r'^[0-9-+() ]+$'); return phoneRegex.hasMatch(phone) && phone.length >= 10; } }