Sembilan chapter di belakang kita membangun kesan bahwa browser bekerja sebagai penjaga gerbang yang tangguh. Bagian ini justru tentang kebalikannya: sampai mana penjaga itu berdiri, dan di titik mana ia berhenti. Memahami batas validasi HTML sama pentingnya dengan memahami fiturnya — batas itulah yang menentukan keputusan arsitektur aplikasi kita.
Lima Pembatas Mendasar #
- Validasi klien bisa dilewati. Atribut hidup di HTML yang dikirim ke pengguna: DevTools bisa menghapus
requiredatau mengubahpatterndalam hitungan detik, dan klien non-browser seperticurlbisa mengirim data apa pun langsung ke endpoint tanpa memuat halaman. Tidak ada mekanisme HTML yang bertahan menghadapi pihak yang mengendalikan klien itu sendiri. - Pesan bawaan tidak bisa dikustomisasi penuh tanpa JavaScript. Teks pesan milik browser;
titlehanya menyisipkan petunjuk, penggantian penuh memerlukansetCustomValidity(). - Validasi hanya memeriksa format.
type="email"memastikan bentuk alamat, bukan keberadaan kotak suratnya;patternmemastikan bentuk nomor HP, bukan kepemilikan nomornya. Keunikan username, kecocokan kata sandi, sisa stok tiket — semuanya di luar jangkauan HTML. - Pengalaman antar browser bervariasi. Letak dan tampilan pesan, gaya pemilih tanggal, bunyi pesan rentang — semuanya detail implementasi masing-masing browser; satu markup bisa terasa berbeda di Chrome, Firefox, dan Safari.
patternterikat kemampuan regex JavaScript. Validasi berkalender, perhitungan checksum, aturan lintas kolom — pekerjaan yang melampaui pola regex realistis, dan lebih tepat ditangani server atau skrip khusus.
Pembagian Tugas HTML dan Server #
| Tugas | HTML | Server |
|---|---|---|
| Kolom wajib terisi | memeriksa | memeriksa ulang |
| Format email, URL, angka, tanggal | memeriksa | memeriksa ulang |
| Panjang teks dan rentang nilai | memeriksa | memeriksa ulang |
| Username belum dipakai pengguna lain | tidak bisa | memeriksa lewat query database |
| Email benar-benar aktif menerima surat | tidak bisa | verifikasi |
| Harga dan stok sesuai data nyata | tidak bisa | memeriksa |
| Kebijakan kompleksitas kata sandi | sebagian (pattern) | memutuskan |
Pola pada kolom Server bukan pengulangan basa-basi: pemeriksaan yang sama dijalankan ulang karena data yang tiba di server bisa jadi tidak pernah melewati form kita sama sekali.
Kerangka Pikir yang Sehat #
Perlakukan validasi HTML sebagai lapis pertama dari tiga: atribut dan type menangkap galat format dalam hitungan detik; JavaScript memperkaya umpan balik ketika kebutuhan melampauinya; server memutuskan kebenaran akhir. Lapis pertama bukan pengaman — ia pelayan pengguna yang cepat, dan pengguna yang dilayani cepat jarang berusaha melewatkannya.
Ringkasan #
- Validasi klien bisa dilewati lewat DevTools atau klien non-browser — server wajib memeriksa ulang seluruh data.
- Pesan bawaan hanya bisa dikustomisasi penuh dengan JavaScript.
- HTML memeriksa format, bukan keberadaan atau kebenaran data nyata.
- Perilaku tampilan bervariasi antar browser;
patternterbatas pada kemampuan regex JavaScript.
Materi pengujian form secara menyeluruh menanti di Section Validasi dan Debugging — mulai dari membaca DOM di DevTools hingga memperbaiki markup yang berperilaku aneh.