Artikel ini merupakan bagian dari seri Belajar HTML untuk Pemula di hanifmu.com. Setelah memahami form input lengkap, kita perlu memastikan data yang dikirim valid. HTML punya beberapa attribute untuk validasi tanpa JavaScript.
Mengapa Validasi Penting?
Validasi memastikan:
- Data yang dikirim lengkap dan benar
- Format email, nomor telepon, dll sesuai
- Server tidak menerima data kosong atau tidak valid
- Pengguna mendapat feedback langsung
required: Input Wajib
Attribute required memaksa pengguna mengisi input sebelum form bisa dikirim:
<input type="text" name="nama" required />
<input type="email" name="email" required />
Jika kolom kosong dan pengguna klik submit, browser akan menampilkan pesan error.
minlength dan maxlength
Batasi jumlah karakter minimal dan maksimal:
<!-- Minimal 3 karakter -->
<input type="text" name="username" minlength="3" />
<!-- Maksimal 50 karakter -->
<input type="text" name="nama" maxlength="50" />
<!-- Password minimal 8 karakter -->
<input type="password" name="password" minlength="8" />
min dan max
Batasi nilai numerik untuk input number, date, dll:
<!-- Umur minimal 17, maksimal 60 -->
<input type="number" name="umur" min="17" max="60" />
<!-- Tanggal tidak boleh sebelum hari ini -->
<input type="date" name="tanggal" min="2026-09-07" />
<!-- Volume 0-100 -->
<input type="range" name="volume" min="0" max="100" />
pattern: Validasi dengan Regex
pattern memvalidasi input dengan regular expression:
<!-- Hanya huruf dan spasi -->
<input type="text" name="nama" pattern="[A-Za-z ]+" />
<!-- Nomor telepon Indonesia -->
<input type="tel" name="telepon" pattern="[0-9]{10,13}" />
<!-- Format NIM (angka 10 digit) -->
<input type="text" name="nim" pattern="[0-9]{10}" />
Contoh Pattern Umum
| Kebutuhan | Pattern |
|---|---|
| Hanya huruf | [A-Za-z]+ |
| Hanya angka | [0-9]+ |
[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$ | |
| Nomor HP | [0-9]{10,13} |
| Nama file | [a-zA-Z0-9_-]+\.[a-z]{2,} |
placeholder: Teks Bantuan
placeholder menampilkan teks panduan di dalam input:
<input type="email" name="email" placeholder="contoh: [email protected]" />
<input type="text" name="alamat" placeholder="Jl. Merdeka No. 1" />
placeholder membantu pengguna memahami format yang diharapkan.
readonly vs disabled
readonly
Input tidak bisa diubah tapi tetap dikirim saat form submit:
<input type="text" name="username" value="budi123" readonly />
Cocok untuk data yang tidak boleh diubah pengguna.
disabled
Input tidak aktif dan tidak dikirim saat form submit:
<input type="text" name="kode" value="AUTO-001" disabled />
Cocok untuk data yang diisi otomatis oleh sistem.
Contoh Form dengan Validasi
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8" />
<title>Form dengan Validasi</title>
<style>
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input,
select {
width: 300px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
}
button {
padding: 10px 20px;
background-color: #4caf50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
</style>
</head>
<body>
<h1>Form Pendaftaran</h1>
<form action="/daftar" method="POST">
<div class="form-group">
<label for="nama">Nama Lengkap (wajib, min 3 karakter):</label>
<input
type="text"
id="nama"
name="nama"
minlength="3"
maxlength="50"
required
placeholder="Masukkan nama"
/>
</div>
<div class="form-group">
<label for="email">Email (wajib):</label>
<input
type="email"
id="email"
name="email"
required
placeholder="contoh: [email protected]"
/>
</div>
<div class="form-group">
<label for="password">Password (wajib, min 8 karakter):</label>
<input
type="password"
id="password"
name="password"
minlength="8"
required
placeholder="Minimal 8 karakter"
/>
</div>
<div class="form-group">
<label for="umur">Umur (17-60 tahun):</label>
<input
type="number"
id="umur"
name="umur"
min="17"
max="60"
required
/>
</div>
<div class="form-group">
<label for="telepon">Nomor HP (10-13 angka):</label>
<input
type="tel"
id="telepon"
name="telepon"
pattern="[0-9]{10,13}"
required
placeholder="081234567890"
/>
</div>
<div class="form-group">
<label for="website">Website (opsional):</label>
<input
type="url"
id="website"
name="website"
placeholder="https://example.com"
/>
</div>
<div class="form-group">
<button type="submit">Daftar</button>
<button type="reset">Reset</button>
</div>
</form>
</body>
</html>
CSS untuk Validasi
CSS bisa menampilkan style berbeda untuk input valid/invalid:
/* Border merah untuk input invalid */
input:invalid {
border-color: red;
}
/* Border hijau untuk input valid */
input:valid {
border-color: green;
}
/* Pesan error */
input:invalid + .error {
color: red;
font-size: 0.8em;
}
Pentingnya Label
Walaupun ada validasi, tetap gunakan <label> untuk:
- Aksesibilitas (screen reader)
- Klik label langsung fokus ke input
- SEO dan dokumentasi kode
Best Practice Validasi
- Gunakan
requireduntuk input wajib - Gunakan
minlength/maxlengthuntuk batas karakter - Gunakan
patternuntuk format khusus - Selalu validasi di server juga (validasi HTML bisa dilewati)
- Beri pesan error yang jelas dan membantu
- Jangan andalkan validasi HTML saja, tambah JavaScript untuk pengalaman lebih baik
Ringkasan
requireduntuk input wajibminlength/maxlengthmembatasi jumlah karaktermin/maxmembatasi nilai numerikpatternvalidasi dengan regexplaceholdermemberi panduan formatreadonlyinput tidak bisa diubahdisabledinput tidak aktif- Validasi HTML initial validation, server validation tetap perlu
Langkah Selanjutnya
Kamu sudah memahami form validation. Artikel selanjutnya membahas label dan fieldset, cara meningkatkan aksesibilitas form.
