Validate — adalah proses memeriksa kebenaran input pengguna sebelum mengirim data ke server atau memprosesnya di dalam aplikasi. Di Android, validasi bidang mencakup pemeriksaan format email, nomor telepon, kata sandi, kewajiban pengisian, dan aturan bisnis lainnya. Menurut Material Design Guidelines, 2026, Validate harus memberikan umpan balik yang jelas kepada pengguna: pesan kesalahan, perubahan warna bidang, ikon status. Validasi yang benar mengurangi jumlah pengiriman formulir yang salah sebesar 40-60% dan meningkatkan pengalaman pengguna.
Poin Utama
Validasi bidang — adalah pemeriksaan satu nilai spesifik yang dimasukkan oleh pengguna untuk kesesuaian dengan aturan yang ditetapkan. Setiap bidang memiliki tipe datanya sendiri: email, angka, telepon, kata sandi, teks. Untuk setiap tipe ada kriterianya sendiri: format, panjang, rentang nilai, kewajiban. Validasi bidang menjawab pertanyaan: apakah input di bidang ini benar?
Perbedaan antara validasi bidang dan validasi formulir adalah bahwa bidang diperiksa secara independen dari bidang lainnya. Email diperiksa berdasarkan pola email, telepon — berdasarkan pola telepon. Jika bidang tidak valid, pengguna melihat kesalahan tepat untuk bidang tersebut. Formulir dapat tetap tidak terkirim meskipun satu bidang tidak lolos pemeriksaan. Validasi bidang adalah blok bangunan untuk validasi formulir yang lengkap.
Menurut penelitian UX, pengguna mengharapkan melihat kesalahan validasi tidak lebih dari 1-2 detik setelah selesai memasukkan. Keterlambatan lebih dari 3 detik dianggap sebagai masalah dengan aplikasi. Oleh karena itu, validasi waktu nyata melalui TextWatcher lebih diutamakan daripada pemeriksaan hanya saat menekan tombol kirim.
Ada tiga pendekatan utama untuk validasi bidang di Android. Pertama — pemeriksaan manual melalui operator kondisional (if, when). Pengembang menulis fungsi yang menerima string dan mengembalikan Boolean atau pesan kesalahan. Pendekatan ini memberikan kontrol penuh atas logika, tetapi memerlukan penulisan kode untuk setiap bidang dan setiap kondisi.
Pendekatan kedua — menggunakan kelas Android bawaan. Misalnya, Patterns.EMAIL_ADDRESS.matcher(email).matches() memeriksa email berdasarkan pola standar. Patterns.PHONE.matcher(phone).matches() — nomor telepon. TextUtils.isEmpty() — memeriksa kekosongan. Metode ini mencakup skenario dasar tanpa menghubungkan dependensi eksternal.
Pendekatan ketiga — pustaka validasi. Pustaka seperti InputValidator, AndroidValidator atau Commons Validator menyediakan anotasi siap pakai dan rantai pemeriksaan. Pengembang mendeskripsikan aturan secara deklaratif: @Email, @NotEmpty, @MinLength(6). Pustaka melakukan pemeriksaan sendiri dan mengembalikan daftar kesalahan. Ini mempercepat pengembangan, tetapi menambahkan dependensi.
| Metode | Kelebihan | Kekurangan | Kapan digunakan |
|---|---|---|---|
| Pemeriksaan manual | Kontrol penuh, tanpa dependensi | Banyak kode, sulit dipelihara | Formulir sederhana dengan 1-3 bidang |
| Kelas bawaan | Cepat, pola standar | Set pemeriksaan terbatas | Bidang standar (email, telepon) |
| Pustaka | Kode minimal, pendekatan deklaratif | Dependensi, sulit dikustomisasi | Formulir kompleks dengan 5+ bidang |
Untuk email, pemeriksaan standar mencakup keberadaan simbol @, bagian domain, dan tidak adanya spasi serta huruf sirilik. Android menyediakan Patterns.EMAIL_ADDRESS, yang mencakup sebagian besar alamat email yang sah. Namun, jika diperlukan pemeriksaan spesifik (misalnya, hanya domain perusahaan), ekspresi reguler kustom harus ditulis. Email divalidasi setelah selesai memasukkan, bukan setelah setiap karakter.
Nomor telepon diperiksa berdasarkan masker negara atau wilayah. Untuk nomor internasional, digunakan format E.164: +kode negara, kode operator, nomor. Pustaka libphonenumber dari Google adalah standar industri untuk validasi telepon. Ini menentukan negara berdasarkan kode, memeriksa panjang dan format nomor. Di Android, Anda dapat menggunakan PhoneNumberUtils.isGlobalPhoneNumber untuk pemeriksaan dasar.
Kata sandi memiliki beberapa kriteria kompleksitas: panjang minimum, keberadaan huruf besar dan kecil, angka, simbol khusus. Di Android tidak ada kelas bawaan untuk pemeriksaan kata sandi — setiap proyek menentukan persyaratannya sendiri. Biasanya kata sandi diperiksa melalui ekspresi reguler atau serangkaian kondisi. Penting untuk tidak mengungkapkan persyaratan tepat dalam pesan kesalahan: “Kata sandi terlalu sederhana” lebih baik daripada “Huruf besar dan angka diperlukan”.
data class ValidationResult(
val isValid: Boolean,
val errorMessage: String? = null
)
fun validatePassword(password: String): ValidationResult {
if (password.length < 6)
return ValidationResult(false, "Minimum 6 characters")
if (!password.any { it.isUpperCase() })
return ValidationResult(false, "Uppercase letter required")
return ValidationResult(true)
}
Dalam contoh, validatePassword mengembalikan ValidationResult dengan bidang isValid dan pesan kesalahan opsional. Pendekatan ini nyaman untuk komposisi: beberapa pemeriksaan dilakukan secara berurutan dan kesalahan pertama yang ditemukan dikembalikan. Validasi email dan telepon dibangun dengan prinsip yang sama — masing-masing mengembalikan hasil dengan pesan atau keberhasilan.
Saat validasi secara kritis memengaruhi UX. Ada tiga strategi: validasi setelah setiap karakter (instant), setelah kehilangan fokus (onFocusLost), dan saat mengirim formulir (onSubmit). Setiap strategi cocok untuk skenario yang berbeda. Validasi instan baik untuk bidang dengan batasan ketat — nomor telepon, kode PIN. OnFocusLost — untuk email dan nama. OnSubmit — untuk bidang wajib.
Menurut Material Design Guidelines, disarankan untuk menggabungkan strategi: bidang harus diperiksa saat kehilangan fokus, serta saat mengirim formulir. Validasi instan tepat ketika batasannya jelas — misalnya, panjang maksimum bidang. Jika kesalahan ditampilkan setelah setiap karakter untuk email, pengguna akan melihat pesan sebelum selesai memasukkan. Ini menjengkelkan dan mengurangi konversi.
Aturan kesalahan pertama: saat mengirim formulir, tunjukkan kesalahan hanya untuk bidang tidak valid pertama. Jangan membebani pengguna dengan daftar 10 kesalahan. Setelah memperbaiki kesalahan pertama, kesalahan berikutnya dapat ditampilkan. Panduan langkah demi langkah ini mengurangi beban kognitif dan membantu pengguna mengisi formulir lebih cepat.
Android SDK menyediakan alat dasar untuk Validate: Patterns untuk email dan telepon, TextUtils untuk memeriksa kekosongan, ekspresi reguler untuk pola arbitrer. Untuk proyek dengan 1-3 bidang, ini sudah cukup. Namun, dalam formulir dengan 10+ bidang, validasi manual menjadi sulit dipelihara — setiap bidang baru memerlukan fungsi terpisah dan pembaruan logika pengiriman.
Pustaka validasi populer: Android Saripaar (anotasi @Email, @NotEmpty, @Password), Commons Validator dari Apache (pemeriksaan email, URL, nomor kartu kredit), RxBinding + RxJava untuk validasi reaktif. Saripaar memungkinkan menempatkan anotasi langsung pada bidang input dan memanggil validasi dengan satu baris: validator.validate(). Pustaka secara otomatis menampilkan kesalahan melalui setError.
Google merekomendasikan penggunaan Material Design Components dengan TextInputLayout. Validasi bawaan melalui setError, setHelperText, dan setCounterEnabled mencakup skenario dasar tanpa pustaka eksternal. Untuk proyek kompleks (fintech, medis), lebih baik menggunakan kombinasi: Material Components + validasi kustom dengan pola dari lapisan domain Clean Architecture.
Kesalahan pertama — menampilkan kesalahan sebelum memulai input. Jika bidang wajib diisi tetapi pengguna belum mulai mengisinya, jangan tampilkan “Bidang wajib diisi”. Ini menciptakan kesan masalah yang salah. Kesalahan harus muncul hanya setelah pengguna berinteraksi dengan bidang: mulai memasukkan, meninggalkan bidang, mencoba mengirim formulir.
Kesalahan kedua — pesan kesalahan yang tidak jelas. Pesan harus spesifik dan menyarankan cara memperbaiki masalah. “Email tidak valid” — buruk. “Email harus mengandung @ dan domain, misalnya user@example.com” — baik. Pengguna harus memahami apa yang salah dan cara memperbaikinya tanpa merujuk ke dokumentasi.
Kesalahan ketiga — memblokir pengiriman tanpa penjelasan. Jika tombol kirim tidak aktif karena kesalahan validasi, pengguna harus melihat bidang mana yang tidak valid. Tombol abu-abu tanpa pesan adalah jalan buntu bagi pengguna. Selalu sorot bidang dengan kesalahan dan tampilkan teks kesalahan di samping setiap bidang yang tidak valid.
| Kesalahan | Masalah | Solusi |
|---|---|---|
| Kesalahan sebelum input | Menakut-nakuti pengguna | Periksa hanya setelah interaksi |
| Pesan tidak jelas | Pengguna tidak mengerti penyebabnya | Deskripsi konkret + contoh |
| Tombol abu-abu | Tidak ada umpan balik | Sorot kesalahan + pesan |
| Validasi berlebihan | Aturan terlalu ketat | Keseimbangan keamanan dan UX |
Pertanyaan yang Sering Diajukan
Saat optimal — saat kehilangan fokus bidang (onFocusLost) dan saat mengirim formulir. Validasi instan setelah setiap karakter hanya cocok untuk bidang dengan batasan ketat: panjang, angka, simbol khusus. Untuk email dan kata sandi, lebih baik menunggu pengguna selesai memasukkan dan memeriksa setelah meninggalkan bidang.
Gunakan Patterns.EMAIL_ADDRESS dari Android SDK. Panggil matcher(emailYangDimasukkan).matches() — metode akan mengembalikan true jika email benar. Untuk pemeriksaan tambahan (memblokir domain sementara, memeriksa catatan MX), diperlukan validasi server. Di sisi klien, cukup periksa format melalui pola bawaan.
Gunakan pustaka validasi seperti Saripaar dengan anotasi pada bidang. Ini akan mempersingkat kode validasi 3-5 kali lipat. Jika proyek menggunakan Clean Architecture, pindahkan logika validasi ke lapisan domain dan uji secara terpisah dari UI. Untuk menampilkan kesalahan, gunakan TextInputLayout dengan setError.
Wajib. Validasi klien — untuk UX, validasi server — untuk keamanan. Penyerang dapat mengirim permintaan langsung ke API, melewati aplikasi. Server harus memeriksa semua bidang lagi. Validasi klien tidak menggantikan validasi server, tetapi melengkapinya untuk kenyamanan pengguna.
Gunakan TextInputLayout.setError() dari Material Design Components. Metode ini menampilkan pesan merah di bawah bidang dan mengubah warna bingkai. Alternatif: TextView terpisah untuk kesalahan di samping bidang. Jangan gunakan Toast atau Snackbar untuk kesalahan validasi bidang individual — pengguna tidak akan mengaitkan pesan dengan bidang tertentu.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga