Form баталгаажуулалт (validation)
Хэрэглэгч form бөглөхдөө буруу өгөгдөл оруулах нь байнга тохиолддог — и-мэйл хаяг дутуу, нууц үг хэт богино, тоо хязгаараас давсан гэх мэт. HTML5 нь JavaScript бичихгүйгээр браузерийн түвшинд эдгээрийг шалгах validation attribute-уудтай.
required — заавал бөглөх
<form>
<label for="нэр">Нэр</label>
<input type="text" id="нэр" name="name" required />
<label for="и-мэйл">И-мэйл</label>
<input type="email" id="и-мэйл" name="email" required />
<button type="submit">Илгээх</button>
</form>
required attribute байвал хоосон орхиод form илгээхийг оролдоход браузер автоматаар алдааны мессеж харуулна.
type — форматын шалгалт
<!-- И-мэйл формат автоматаар шалгагдана -->
<input type="email" name="email" required />
<!-- URL формат шалгагдана — https:// шаардна -->
<input type="url" name="website" />
<!-- Зөвхөн тоо оруулах боломжтой -->
<input type="number" name="age" />
<!-- Утасны дугаар -->
<input type="tel" name="phone" />
type="email" нь @ тэмдэгт болон домэйн байгаа эсэхийг шалгана. Гэхдээ и-мэйл үнэхээр оршин байгаа эсэхийг шалгадаггүй — энэ нь серверийн ажил.
minlength ба maxlength — текстийн урт
<!-- Хэрэглэгчийн нэр: 2–50 тэмдэгт -->
<input
type="text"
name="username"
minlength="2"
maxlength="50"
required
/>
<!-- Нууц үг: хамгийн багадаа 8 тэмдэгт -->
<input
type="password"
name="password"
minlength="8"
required
/>
<!-- Тайлбар: 500 тэмдэгтээс хэтрэхгүй -->
<textarea name="bio" maxlength="500"></textarea>
min ба max — тооны хязгаар
<!-- Нас: 18–120 -->
<input type="number" name="age" min="18" max="120" />
<!-- Үнэлгээ: 1–5 -->
<input type="number" name="rating" min="1" max="5" step="1" />
<!-- Огноо: 2024 оноос хойш -->
<input type="date" name="birthdate" max="2024-12-31" />
<!-- Хувь: 0.0–100.0 -->
<input type="number" name="percent" min="0" max="100" step="0.1" />
step attribute нь утга хэдээр нэмэгдэх/хасагдахыг заана.
pattern — regex загвар
pattern attribute нь regular expression (regex) ашиглан өгөгдлийн хэлбэрийг шалгана:
<!-- Монгол утасны дугаар: 8 оронтой тоо -->
<label for="утас">Утасны дугаар</label>
<input
type="tel"
id="утас"
name="phone"
pattern="[0-9]{8}"
placeholder="88001234"
title="8 оронтой утасны дугаар оруулна уу"
required
/>
<!-- Нууц үг: үсэг болон тоо заавал агуулсан, 8+ тэмдэгт -->
<input
type="password"
name="password"
pattern="(?=.*[A-Za-z])(?=.*\d).{8,}"
title="Үсэг болон тоо хоёуланг агуулсан, 8-аас дээш тэмдэгт"
required
/>
<!-- Зөвхөн латин үсэг, тоо, доогуур зураас -->
<input
type="text"
name="username"
pattern="[A-Za-z0-9_]+"
title="Зөвхөн латин үсэг, тоо, _ тэмдэгт ашиглах боломжтой"
/>
title attribute нь validation алдааны мессежийг өгдөг — хэрэглэгчид ойлгомжтой байх ёстой.
Бүтэн form жишээ
<form novalidate id="бүртгэлийн-форм">
<!-- Нэр -->
<div>
<label for="нэр">Нэр *</label>
<input
type="text"
id="нэр"
name="name"
minlength="2"
maxlength="50"
required
/>
</div>
<!-- И-мэйл -->
<div>
<label for="и-мэйл">И-мэйл *</label>
<input
type="email"
id="и-мэйл"
name="email"
required
/>
</div>
<!-- Нууц үг -->
<div>
<label for="нууц-үг">Нууц үг *</label>
<input
type="password"
id="нууц-үг"
name="password"
minlength="8"
pattern="(?=.*[A-Za-z])(?=.*\d).{8,}"
title="Үсэг болон тоо хоёуланг агуулсан, 8+ тэмдэгт"
required
/>
</div>
<!-- Нас -->
<div>
<label for="нас">Нас</label>
<input
type="number"
id="нас"
name="age"
min="14"
max="120"
/>
</div>
<button type="submit">Бүртгүүлэх</button>
</form>
Browser validation vs server validation
Browser validation (HTML attribute-уудаар):
- JavaScript шаардахгүй, хурдан
- Хэрэглэгчид шуурхай мэдэгдэл өгдөг
- Найдвартай биш — хэрэглэгч HTML-г өөрчилж эсвэл шууд HTTP хүсэлт илгээж bypassed хийж болно
Server validation (backend код):
- Заавал шаардлагатай — ямар ч тохиолдолд сервер дээр дахин шалгана
- Мэдээллийн санд хадгалахаас өмнө шалгана
- И-мэйл давхардсан эсэх зэрэг database-ийн шалгалтыг хийж чадна
Дүгнэлт: Browser validation нь хэрэглэгчийн туршлагыг сайжруулах туслалцаа. Server validation нь заавал байх аюулгүй байдлын хамгаалалт. Хоёуланг хамт ашиглана.
novalidate — браузерийн validation-г унтраах
Хэрэв JavaScript-ээр custom validation хийх бол novalidate attribute нэмж браузерийн default мессежийг унтарна:
<form novalidate id="форм">
<!-- JavaScript-ээр өөрийн validation хийнэ -->
</form>
Дараагийн хичээлд:
Нарийн input төрлүүдийг судлана — search, datetime-local, color, datalist autocomplete зэрэг HTML5-ийн сонирхолтой input-уудыг практикаар үзнэ.