Forma validatsiyasi — required, min, max, minlength, pattern
Muammodan boshlaylik
Ro'yxatdan o'tish formasi serverga keladi:
ism=
email=ali.mail.uz
parol=123
yosh=-5
telefon=salom
Ism bo'sh, email noto'g'ri, parol juda qisqa, yosh manfiy, telefon — matn. Server xato qaytaradi, sahifa yangilanadi, foydalanuvchi hamma narsani qaytadan yozadi va asabiylashadi.
Ma'lumotni yuborishdan oldin, brauzerning o'zida tekshirish mumkin — bir qator JavaScript siz. Bu validatsiya deb ataladi.
required — majburiy maydon
<label for="ism">Ism</label>
<input id="ism" name="ism" required>
Maydon bo'sh bo'lsa, forma yuborilmaydi va brauzer xabar ko'rsatadi: "Iltimos, bu maydonni to'ldiring". Fokus avtomatik ravishda o'sha maydonga o'tadi.
Turli elementlarda:
<input type="checkbox" name="rozilik" required> <!-- belgilanishi shart -->
<fieldset> <!-- guruhdan bittasi tanlanishi shart -->
<legend>Jins</legend>
<label><input type="radio" name="jins" value="e" required> Erkak</label>
<label><input type="radio" name="jins" value="a"> Ayol</label>
</fieldset>
<select name="viloyat" required> <!-- bo'sh value li variant hisoblanmaydi -->
<option value="">— Tanlang —</option>
...
</select>
Radio guruhida required ni bitta tugmaga yozish kifoya.
[!TIP] Majburiy maydonlarni foydalanuvchiga ko'rsating — odatda label yonida
*va formaning boshida "* — majburiy maydonlar" izohi. Faqat rang bilan belgilamang: ko'rish qobiliyati past foydalanuvchilar uni sezmasligi mumkin.
Uzunlik — minlength va maxlength
<label for="parol">Parol (kamida 8 belgi)</label>
<input id="parol" name="parol" type="password" minlength="8" maxlength="64" required>
minlength— kamida shuncha belgi; kam bo'lsa yuborishda xatomaxlength— ko'pi bilan; brauzer ortiqcha yozishga yo'l qo'ymaydi- Bo'sh maydon
minlengthtekshiruvidan o'tadi — majburiy bo'lsarequiredham qo'shing
textarea da ham ishlaydi: <textarea maxlength="500">.
Chegaralar — min, max, step
<label for="yosh">Yosh</label>
<input id="yosh" name="yosh" type="number" min="7" max="100" required>
<label for="sana">Uchrashuv sanasi</label>
<input id="sana" name="sana" type="date" min="2026-11-07" max="2026-12-31">
<label for="summa">Summa (1 000 so'mga karrali)</label>
<input id="summa" name="summa" type="number" min="1000" step="1000">
min,max—number,range,date,timeva boshqa sana turlaridastep— qiymatmindan boshlab qadamga karrali bo'lishi kerak:step="1000"bilan2500— xatostep="any"— istalgan kasr son
Tur bo'yicha tekshiruv
16-darsdan: ba'zi turlar formatni o'zi tekshiradi:
| Tur | Tekshiruv |
|---|---|
email |
nimadir@nimadir ko'rinishi |
url |
Protokol bilan: https://... |
number |
Faqat son |
date, time |
To'g'ri sana/vaqt |
tel, text, search |
Tekshirmaydi — pattern kerak |
pattern — o'z qoidangiz
<label for="tel">Telefon (+998 XX XXX XX XX)</label>
<input
id="tel"
name="tel"
type="tel"
pattern="\+998 ?\d{2} ?\d{3} ?\d{2} ?\d{2}"
title="Masalan: +998 90 123 45 67"
required
>
pattern — regular expression (muntazam ifoda): qiymat qanday ko'rinishda bo'lishi kerakligi.
- Qiymat to'liq mos kelishi kerak —
^va$avtomatik qo'shiladi title— xato xabarida qo'shimcha izoh sifatida ko'rsatiladi- Faqat matnli turlar:
text,tel,email,url,password,search
Ko'p ishlatiladigan namunalar:
| Nima | pattern |
|---|---|
| O'zbekiston telefoni | \+998\d{9} |
| 6 xonali SMS kod | \d{6} |
| Pasport seriyasi (AA1234567) | [A-Z]{2}\d{7} |
| Faqat lotin harflari | [A-Za-z]+ |
Login: harf, raqam, _, 3–16 belgi |
[a-zA-Z0-9_]{3,16} |
| Pochta indeksi | \d{6} |
[!INFO]
patterndagi muntazam ifodalar JavaScript dagi bilan bir xil sintaksisda vavbayrog'i bilan ishlaydi. Shuning uchun ba'zi belgilar (masalan,[ichidagi-yoki|) qo'shimcha ekranlashni talab qilishi mumkin. Murakkab ifodalarni avval brauzer konsolida sinab ko'ring.
CSS bilan holatni ko'rsatish
Brauzer har bir maydonning holatini biladi, va CSS uni ko'rsata oladi:
input:invalid {
border-color: #ef4444;
}
input:valid {
border-color: #10b981;
}
Muammo: :invalid sahifa ochilishi bilanoq ishlaydi — foydalanuvchi hali hech narsa yozmagan, lekin hamma required maydonlar qizil. Yechim — :user-invalid:
/* faqat foydalanuvchi maydon bilan ishlab bo'lgandan keyin */
input:user-invalid {
border-color: #ef4444;
}
input:user-invalid + .xato {
display: block;
}
:user-invalid — foydalanuvchi maydonni o'zgartirib undan chiqqandan yoki formani yuborishga uringandan keyingina ishlaydi. Barcha zamonaviy brauzerlarda mavjud.
JavaScript bilan — Constraint Validation API
HTML validatsiyasini JavaScript dan ham boshqarish mumkin:
const email = document.querySelector('#email');
email.validity.valid // true / false
email.validity.valueMissing // required, lekin bo'sh
email.validity.typeMismatch // email formati noto'g'ri
email.validity.tooShort // minlength dan kam
email.validity.patternMismatch
email.validationMessage // brauzerning xabari
form.checkValidity() // butun forma to'g'rimi
form.reportValidity() // tekshirib, xabarlarni ko'rsatish
O'z xabaringiz
const parol2 = document.querySelector('#parol2');
parol2.addEventListener('input', () => {
if (parol2.value !== parol.value) {
parol2.setCustomValidity('Parollar mos kelmadi');
} else {
parol2.setCustomValidity(''); // bo'sh qator — xato yo'q
}
});
setCustomValidity() — HTML atributlari bilan ifodalab bo'lmaydigan qoidalar uchun: parollar mosligi, sana oralig'i, server tekshiruvi natijasi.
[!WARNING]
setCustomValidity('...')dan keyin xato tuzatilganda bo'sh qator bilan tozalashni unutmang. Aks holda maydon abadiy "xato" holatida qoladi va forma hech qachon yuborilmaydi.
novalidate — brauzer tekshiruvini o'chirish
<form novalidate>...</form>
Brauzerning o'z xabarlarini o'chiradi (atributlar va validity ishlayveradi). O'z xato ko'rsatish usulingizni JavaScript bilan yozganda ishlatiladi. Bitta tugma uchun: <button formnovalidate>Qoralama sifatida saqlash</button>.
Eng muhim qoida
[!WARNING] Brauzerdagi validatsiya — foydalanuvchi uchun qulaylik, xavfsizlik emas. DevTools da
requiredni o'chirish,curlyoki Postman bilan formani chetlab to'g'ridan-to'g'ri so'rov yuborish — bir necha soniyalik ish. Server har doim barcha ma'lumotni qaytadan tekshirishi shart. Brauzer validatsiyasi — tez javob va yaxshi tajriba uchun; server validatsiyasi — himoya uchun. Ikkalasi ham kerak.
To'liq misol
<form action="/royxat" method="post">
<p>* — majburiy maydonlar</p>
<label for="ism">Ism *</label>
<input id="ism" name="ism" autocomplete="name" required minlength="2">
<label for="email">Email *</label>
<input id="email" name="email" type="email" autocomplete="email" required>
<label for="tel">Telefon</label>
<input id="tel" name="tel" type="tel" pattern="\+998\d{9}" title="Masalan: +998901234567">
<label for="parol">Parol * (kamida 8 belgi)</label>
<input id="parol" name="parol" type="password" autocomplete="new-password" required minlength="8">
<label>
<input type="checkbox" name="rozilik" required>
Foydalanish shartlariga roziman *
</label>
<button type="submit">Ro'yxatdan o'tish</button>
</form>
Nima uchun shunday?
Server baribir tekshirsa, nima uchun brauzerda ham tekshirish kerak — ikki marta ish emasmi?
Chunki ular turli maqsadlarga xizmat qiladi. Server tekshiruvi — himoya: noto'g'ri yoki zararli ma'lumot bazaga tushmasligi uchun. Brauzer tekshiruvi — tezlik va qulaylik: foydalanuvchi xatoni darhol, aynan o'sha maydon yonida ko'radi, sahifa yangilanmaydi, yozilgan ma'lumot yo'qolmaydi, server keraksiz so'rovlar bilan yuklanmaydi. HTML atributlari bilan bu deyarli bepul: bitta required yozish JavaScript dagi o'nlab qatorni almashtiradi va ekran o'quvchilar bilan ham to'g'ri ishlaydi.
Xulosa
Eslab qoling:
required— majburiy (input, checkbox, radio guruh, select)minlength/maxlength— matn uzunligimin/max/step— son va sana chegaralaritype—email,url,numberformatni o'zi tekshiradipattern— regex, to'liq moslik;title— izoh- CSS:
:user-invalid— foydalanuvchi ishlagandan keyin;:invalid— darhol - JS:
validity,checkValidity(),setCustomValidity()(tozalashni unutmang) - Brauzer validatsiyasi — qulaylik; server validatsiyasi — majburiy
Keyingi bo'lim
4-bo'lim: Accessibility — saytni barcha foydalanuvchilar uchun qulay qilish: ARIA va klaviatura navigatsiyasi.