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 #

  1. Validasi klien bisa dilewati. Atribut hidup di HTML yang dikirim ke pengguna: DevTools bisa menghapus required atau mengubah pattern dalam hitungan detik, dan klien non-browser seperti curl bisa mengirim data apa pun langsung ke endpoint tanpa memuat halaman. Tidak ada mekanisme HTML yang bertahan menghadapi pihak yang mengendalikan klien itu sendiri.
  2. Pesan bawaan tidak bisa dikustomisasi penuh tanpa JavaScript. Teks pesan milik browser; title hanya menyisipkan petunjuk, penggantian penuh memerlukan setCustomValidity().
  3. Validasi hanya memeriksa format. type="email" memastikan bentuk alamat, bukan keberadaan kotak suratnya; pattern memastikan bentuk nomor HP, bukan kepemilikan nomornya. Keunikan username, kecocokan kata sandi, sisa stok tiket — semuanya di luar jangkauan HTML.
  4. 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.
  5. pattern terikat 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 #

TugasHTMLServer
Kolom wajib terisimemeriksamemeriksa ulang
Format email, URL, angka, tanggalmemeriksamemeriksa ulang
Panjang teks dan rentang nilaimemeriksamemeriksa ulang
Username belum dipakai pengguna laintidak bisamemeriksa lewat query database
Email benar-benar aktif menerima surattidak bisaverifikasi
Harga dan stok sesuai data nyatatidak bisamemeriksa
Kebijakan kompleksitas kata sandisebagian (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; pattern terbatas 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.