Form Types
✅ Form Validation — Galat Data Roko
<input type="email" required pattern="[^@]+@[^@]+">
Form validation users ko galat data submit karne se rokti hai. Bina iske koi "abc" phone number de sakta, email blank chhod sakta, ya "hello" age mein likh sakta. Validation data check karta hai BEFORE server reach — instant feedback, koi round trip nahi.
Do types: Built-in (HTML attributes jaise required, pattern, min/max) — browser automatically karta hai. Custom (JavaScript checkValidity(), reportValidity(), setCustomValidity()) — tum rules likhte ho. Hamesha built-in se start karo, custom tab jab zarurat ho.
Auto Stand Analogy: "Bhai, form mein sab fill karo, warna order nahi hoga" =
required. "Sirf 10 digit number likho" = pattern. "Minimum 1, maximum 10 parcel" = min/max. Validation = auto stand ka bouncer.Code Example
HTML — Form Validation — Galat Data Roko
<!-- Required — field empty nahi ho sakta -->
<input type="text" name="name" required>
<input type="email" required>
<!-- Min/Max length -->
<input type="password" minlength="8" maxlength="50">
<!-- Min/Max value (numbers) -->
<input type="number" min="1" max="10" step="1">
<!-- Pattern — regex validation -->
<input type="tel"
pattern="[0-9]{10}"
title="Exactly 10 digit number daalo"
placeholder="9876543210">
<!-- Pattern for Indian phone -->
<input type="tel"
pattern="[6-9][0-9]{9}"
title="Indian mobile: 6-9 se start, 10 digits">
<!-- Pattern for name (sirf letters aur spaces) -->
<input type="text"
pattern="[A-Za-z\s]{2,50}"
title="Sirf letters aur spaces, 2-50 characters">
<!-- Email pattern (strict) -->
<input type="email"
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
<!-- Custom validation message -->
<input type="text" id="pincode"
pattern="[1-9][0-9]{5}"
title="6 digit pincode, 0 se start nahi hoga">
<!-- Form-level validation -->
<form id="orderForm" novalidate>
<input type="text" required>
<input type="email" required>
<button type="submit">Submit</button>
</form>
<script>
// novalidate = browser ka default popup disable
// Custom messages ke liye JS validation use karo
const form = document.getElementById('orderForm');
const pincode = document.getElementById('pincode');
// Custom error message
pincode.addEventListener('input', function() {
if (this.value && !this.validity.valid) {
this.setCustomValidity('6 digit pincode daalo, 0 se start nahi hoga');
} else {
this.setCustomValidity('');
}
});
// Manual validation check
form.addEventListener('submit', function(e) {
e.preventDefault();
if (form.checkValidity()) {
// Sab valid — submit
console.log('Form valid hai!');
} else {
// Errors dikhao
form.reportValidity();
}
});
// Single field check
if (pincode.checkValidity()) {
console.log('Pincode valid hai');
}
</script>
<!-- CSS for validation states -->
<style>
input:invalid {
border: 2px solid #ef4444;
}
input:valid {
border: 2px solid #10b981;
}
input:required {
border-left: 4px solid #f59e0b;
}
input:placeholder-shown {
border-color: #94a3b8;
}
</style>requiredField empty nahi ho sakta — browser submit block karta hai aur message dikhata haiminlength/maxlengthMinimum aur maximum character countmin/maxMinimum aur maximum numeric valuestepAllowed increments (e.g., step="0.5" half values ke liye)pattern="..."Regex pattern — data ko ye format match karna chahiyetitle="..."Custom tooltip jab pattern fail honovalidate<form> pe — browser ka default validation popup disablecheckValidity()True/false return karta hai — popup bina dikhaye checkreportValidity()Browser popup dikhata hai pehla error jo milasetCustomValidity()Field ke liye custom error message set karo:invalid CSSStyle fields jo validation fail ki:valid CSSStyle fields jo validation pass ki:required CSSStyle fields jo mandatory hain:placeholder-shownStyle fields jo abhi bhi empty hain (placeholder dikh raha)[0-9]{10}Regex: exactly 10 digits[6-9][0-9]{9}Regex: Indian mobile — 6-9 se start, total 10 digits✅ When to Use
- Har form field jo empty nahi ho sakta → required
- Phone numbers → pattern digit count ke saath
- Naam → pattern sirf letters allow kare
- Pincode → pattern 6 digits ke liye
- Passwords → minlength minimum strength ke liye
- Quantities → min="1" zero/negative rokne ke liye
- Custom error messages → setCustomValidity()
- Real-time visual feedback → :valid/:invalid CSS
❌ When NOT to Use
- Server-side validation replacement → KABHI NAHI, server pe bhi validate karo
- Over-validating — uppercase force mat karo, naam sirf English letters pe restrict mat karo
- Complex regex jab simple built-in kaam kare (type="email" already @ validate karta hai)
- novalidate bina custom JS validation add kiye
Validation ko layer karo: 1) HTML built-in (required, type, pattern), 2) CSS visual feedback (:valid/:invalid), 3) JS custom messages (setCustomValidity), 4) Server-side (HAMESHA, client pe kabhi bharosa mat karo). Koi layer miss = production mein bugs.