Files
2026-01-22 09:11:15 +07:00

62 lines
2.0 KiB
TypeScript

/**
* Composable untuk menyediakan fungsi dan aturan validasi umum.
*/
export const useValidation = () => {
const required = (value, message = 'Bidang ini wajib diisi.') => {
// Memastikan nilai ada dan bukan string kosong (setelah trim)
return (value !== null && value !== undefined && String(value).trim() !== '') || message;
};
const minNameLength = (value, minLength = 3) => {
if (!value) return true; // Lewati jika kosong (handle oleh 'required')
const length = value.trim().length; // Hitung panjang setelah menghapus spasi di awal/akhir
return length >= minLength || `Panjang minimal adalah ${minLength} karakter.`;
};
const isNumber = (value) => {
if (!value) return true; // Lewati jika kosong (handle oleh 'required')
return /^[0-9]+$/.test(value) || 'Hanya boleh mengandung angka.';
};
const phoneLength = (value) => {
if (!value) return true;
// Hapus karakter non-angka sebelum menghitung panjang
const length = value.replace(/[^0-9]/g, '').length;
return (length >= 9 && length <= 15) || 'Nomor telepon harus antara 9 hingga 15 digit.';
};
const indonesianPhoneFormat = (value) => {
if (!value) return true;
// Pola: Harus dimulai dengan '08', diikuti 7 hingga 13 digit angka
return /^08[0-9]{7,13}$/.test(value) || 'Format nomor telepon tidak valid (Contoh: 08xxxxxxxx).';
};
// Gabungkan semua aturan validasi telepon ke dalam satu objek untuk kemudahan
const phoneRules = [
required,
isNumber,
phoneLength,
indonesianPhoneFormat // Opsional: Hapus komentar jika format 08 wajib
];
const textRules = [
required,
minNameLength
];
const requiredRules = [
required
]
return {
required,
isNumber,
phoneLength,
indonesianPhoneFormat,
phoneRules,
textRules,
requiredRules
};
};