HTML5 నేటివ్ క్లయింట్-సైడ్ వాలిడేషన్: required, pattern (Regex), min, max & CSS :valid/:invalid
ఒక అంతర్జాతీయ విమానాశ్రయం (Airport) వద్ద జరిగే సెక్యూరిటీ తనిఖీని ఊహించుకోండి: ఒక ప్రయాణీకుడు విమానం ఎక్కే ముందు — అతని వద్ద సరైన పాస్పోర్ట్ ఉందో లేదో ఎంట్రన్స్ వద్దే గ్రౌండ్ స్టాఫ్ తనిఖీ చేస్తారు. ఒకవేళ టికెట్ లేదా పాస్పోర్ట్ లేని ప్రయాణీకుడిని నేరుగా రన్వే పైకి రానిచ్చి, చివర్లో ఫ్లైట్ డోర్ వద్ద "మీ వద్ద టికెట్ లేదు, వెనక్కి వెళ్ళండి" అని చెబితే ఎంత సమయం, శ్రమ, ఇంధనం వృధా అవుతుంది?
వెబ్ డెవలప్మెంట్లో కూడా సరిగ్గా ఇదే సూత్రం వర్తిస్తుంది! ఒక యూజర్ ఫారమ్లో ఈమెయిల్ లేదా పాస్వర్డ్ కొట్టకుండా సబ్మిట్ బటన్ నొక్కినప్పుడు — ఆ ఖాళీ రిక్వెస్ట్ బ్యాకెండ్ సర్వర్ వరకు వెళ్ళి, డేటాబేస్ తనిఖీ చేసి మళ్ళీ "ఎర్రర్" అని యూజర్కు జవాబు పంపితే అమూల్యమైన సర్వర్ ప్రాసెసింగ్ మరియు ఇంటర్నెట్ డేటా వృధా అవుతాయి. యూజర్ కూడా నిరీక్షించి అసహనానికి గురవుతాడు.
దీనిని పరిష్కరించడానికి ఆధునిక HTML5 లో క్లయింట్-సైడ్ నేటివ్ వాలిడేషన్ (Native Form Validation) వచ్చింది. ఒక్క లైన్ జావాస్క్రిప్ట్ కోడ్ కూడా రాయకుండా — కేవలం required, pattern (Regex), min, max లాంటి సింపుల్ ఆట్రిబ్యూట్లతో బ్రౌజర్ లోపలే తక్షణమే లోపాలను పసిగట్టి అద్భుతమైన ఎర్రర్ పాపప్లను చూపించవచ్చు. ఈ పదహారవ అధ్యాయంలో Phase 04 ను పరిపూర్ణం చేస్తూ నేటివ్ వాలిడేషన్ సూత్రాలను లోతుగా నేర్చుకుందాం!
- క్లయింట్-సైడ్ vs సర్వర్-సైడ్ వాలిడేషన్: యూజర్ ఎక్స్పీరియన్స్ (UX) వర్సెస్ అసలైన డేటాబేస్ సెక్యూరిటీ.
requiredఆట్రిబ్యూట్: ఖాళీ ఫీల్డ్లతో ఫారమ్ సబ్మిట్ కాకుండా బ్రౌజర్ స్థాయిలో ఆపే విధానం.- పొడవు నియంత్రణ (minlength & maxlength): అక్షరాల పరిమితిని సురక్షితంగా అమలు చేయడం.
- పరిధి నియంత్రణ (min, max, step): సంఖ్యలు, ధరలు మరియు తేదీలను పరిమితులకు లోబడి ఉంచడం.
- రెగ్యులర్ ఎక్స్ప్రెషన్స్ పవర్ (pattern): భారతీయ 6-అంకెల పిన్కోడ్, పాన్ కార్డ్, మరియు మొబైల్ నంబర్లకు Regex రాసే పద్ధతి.
- కస్టమ్ ఎర్రర్ వివరణ (title ఆట్రిబ్యూట్): యూజర్కు స్పష్టమైన సూచనలను అందించడం.
- CSS సూడో-క్లాసెస్ (:valid & :invalid): ఇన్పుట్ బాక్సులకు లైవ్ గ్రీన్/రెడ్ విజువల్ బోర్డర్లను అందించడం.
- వాలిడేషన్ బైపాస్ (novalidate): డ్రాఫ్ట్లు సేవ్ చేయడానికి లేదా డెవలపర్ టెస్టింగ్ కోసం వాలిడేషన్ ఆపే మార్గం.
ప్రతి సీనియర్ సాఫ్ట్వేర్ ఇంజనీర్ గుర్తుంచుకునే అత్యంత ముఖ్యమైన సూత్రం: "క్లయింట్-సైడ్ వాలిడేషన్ అనేది యూజర్ సౌకర్యం (UX) కోసం; సర్వర్-సైడ్ వాలిడేషన్ అనేది భద్రత (Security) కోసం!"
| ఫీచర్ / అంశం | క్లయింట్-సైడ్ వాలిడేషన్ (HTML5 / JS) | సర్వర్-సైడ్ వాలిడేషన్ (Node.js / Python / Java) |
|---|---|---|
| ఎక్కడ నడుస్తుంది? | యూజర్ యొక్క బ్రౌజర్ లోపల (Client Browser). | సుదూరంలో ఉన్న బ్యాకెండ్ సర్వర్లో (Backend Server). |
| స్పందన వేగం | ⚡ తక్షణం (Instant). నెట్వర్క్ రిక్వెస్ట్ అవసరం లేదు. | నెట్వర్క్ జాప్యం (Network round-trip latency). |
| భద్రత (Security) | ❌ హాకర్లు బ్రౌజర్ Inspect Element ద్వారా దీన్ని బైపాస్ చేయగలరు. | 🛡️ నూరు శాతం అభేద్యం. హ్యాకర్లు దీన్ని దాటలేరు. |
| ప్రధాన ఉద్దేశం | యూజర్కు మంచి అనుభవం ఇవ్వడం (Instant Feedback). | డేటాబేస్ లోకి తప్పుడు లేదా హానికరమైన డేటా రాకుండా ఆపడం. |
required రాశాం కదా అని బ్యాకెండ్ సర్వర్లో వాలిడేషన్ రాయడం మర్చిపోకూడదు! రెండూ తప్పనిసరిగా ఉండాలి.
ఒక ఫారమ్లోని నిర్దిష్ట ఇన్పుట్ ఫీల్డ్ను యూజర్ ఖాళీగా వదిలేయకుండా (Mandatory field) ఖచ్చితంగా నింపాలని ఆదేశించడానికి required అనే బూలియన్ ఆట్రిబ్యూట్ను ఉపయోగిస్తాం.
<form action="/submit" method="POST" style="max-width: 400px; padding: 16px; border: 1px solid #cbd5e1; border-radius: 8px;">
<p>
<label for="full-name">పూర్తి పేరు <span style="color:red;">*</span>:</label><br>
<input type="text" id="full-name" name="name" required placeholder="మీ పేరు నమోదు చేయండి" style="width:100%; padding:8px; margin-top:4px;">
</p>
<p>
<label for="user-mail">ఈమెయిల్ చిరునామా <span style="color:red;">*</span>:</label><br>
<input type="email" id="user-mail" name="email" required placeholder="name@domain.com" style="width:100%; padding:8px; margin-top:4px;">
</p>
<button type="submit" style="background:#10b981; color:white; border:none; padding:10px 20px; border-radius:6px; cursor:pointer;">
సబ్మిట్ చేయండి
</button>
</form>
యూజర్ టైప్ చేసే అక్షరాల సంఖ్యను నిర్దిష్ట పరిధిలో ఉంచడానికి ఈ రెండు ఆట్రిబ్యూట్లు ఉపయోగపడతాయి:
minlength="సంఖ్య": యూజర్ కనీసం ఇన్ని అక్షరాలు టైప్ చేయాలి. ఉదాహరణకు పాస్వర్డ్కుminlength="8"ఇస్తే — యూజర్ 7 అక్షరాలు కొట్టి సబ్మిట్ చేసినప్పుడు బ్రౌజర్ ఎర్రర్ చూపిస్తుంది.maxlength="సంఖ్య": యూజర్ గరిష్టంగా ఇన్ని అక్షరాలు మాత్రమే టైప్ చేయగలడు. ఈ సంఖ్య దాటిన తర్వాత కీబోర్డ్పై నొక్కినా బాక్స్లో అక్షరాలు పడవు!
<label for="secure-pass">బలమైన పాస్వర్డ్ (కనీసం 8, గరిష్టంగా 20 అక్షరాలు):</label><br>
<input type="password" id="secure-pass" name="password" minlength="8" maxlength="20" required
placeholder="8 నుండి 20 అక్షరాలు" style="padding:8px; width:100%; max-width:350px;">
type="number", type="range", లేదా type="date" ఇన్పుట్లలో సంఖ్యలను మరియు తేదీలను సరిహద్దుల లోపల ఉంచడానికి ఈ ఆట్రిబ్యూట్లు ఉపయోగపడతాయి:
<form style="max-width: 450px;">
<!-- 1. టికెట్ల సంఖ్య (కనిష్టంగా 1, గరిష్టంగా 5) -->
<p>
<label for="tickets">సినిమా టికెట్ల సంఖ్య (1 నుండి 5 మాత్రమే):</label><br>
<input type="number" id="tickets" name="ticket_count" min="1" max="5" value="1" required style="padding:6px 10px;">
</p>
<!-- 2. పెట్రోల్ లీటర్లు (step="0.5" తో సగం లీటర్లు కూడా అనుమతి) -->
<p>
<label for="fuel">ఇంధనం పరిమాణం (లీటర్లలో - 0.5 స్టెప్):</label><br>
<input type="number" id="fuel" name="liters" min="0.5" max="50" step="0.5" value="1.0" style="padding:6px 10px;">
</p>
<!-- 3. జర్నీ డేట్ (గత తేదీలను ఎంచుకోకుండా ఆపడం) -->
<p>
<label for="journey">ప్రయాణ తేదీ (2026 నవంబర్ మాత్రమే):</label><br>
<input type="date" id="journey" name="travel_date" min="2026-11-01" max="2026-11-30" required style="padding:6px;">
</p>
</form>
ఇది HTML5 లో అత్యంత శక్తివంతమైన మరియు అధునాతనమైన వాలిడేషన్ అస్త్రం! pattern ఆట్రిబ్యూట్ ద్వారా ఒక రెగ్యులర్ ఎక్స్ప్రెషన్ (Regular Expression / Regex) నమూనాను ఇస్తే — యూజర్ టైప్ చేసిన సమాచారం అక్షరాలా ఆ నమూనాతో సరిపోలితేనే ఫారమ్ సబ్మిట్ అవుతుంది.
భారతదేశంలో నిత్యం వాడే 4 అత్యంత కీలకమైన Regex నమూనాలు:
| ఫీల్డ్ రకం | pattern (Regex కోడ్) | వివరణ & ఉదాహరణ |
|---|---|---|
| భారతీయ పిన్కోడ్ (Pincode) | pattern="[1-9][0-9]{5}" |
మొదటి అంకె 0 కాకుండా 1-9 ఉండాలి, తర్వాత 5 అంకెలు ఉండాలి (ఖచ్చితంగా 6 అంకెలు). ఉదా: 500081 |
| 10 అంకెల మొబైల్ నంబర్ | pattern="[6-9][0-9]{9}" |
భారతదేశంలో మొబైల్ నంబర్ 6, 7, 8, లేదా 9 తో మొదలై మొత్తం 10 అంకెలు ఉండాలి. |
| పాన్ కార్డ్ నంబర్ (PAN Card) | pattern="[A-Z]{5}[0-9]{4}[A-Z]{1}" |
మొదట 5 పెద్ద అక్షరాలు, 4 అంకెలు, చివర 1 పెద్ద అక్షరం. ఉదా: ABCDE1234F |
| బలమైన పాస్వర్డ్ | pattern="(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,}" |
కనీసం 8 అక్షరాలు, కనీసం ఒక చిన్న అక్షరం, ఒక పెద్ద అక్షరం, మరియు ఒక అంకె ఉండాలి. |
<form style="max-width: 400px;">
<p>
<label for="pin">భారతీయ 6 అంకెల పిన్కోడ్:</label><br>
<input type="text" id="pin" name="pincode"
pattern="[1-9][0-9]{5}"
title="దయచేసి సరైన 6 అంకెల భారతీయ పిన్కోడ్ నమోదు చేయండి (సున్నాతో ప్రారంభం కాకూడదు)"
required
placeholder="ఉదా: 500081"
style="padding: 8px; width: 100%; margin-top: 4px;">
</p>
<button type="submit" style="background:#10b981; color:white; padding:8px 16px; border:none; border-radius:6px; cursor:pointer;">ధృవీకరించండి</button>
</form>
pattern రాసినప్పుడు ఎల్లప్పుడూ దానికి తోడుగా title="..." ఆట్రిబ్యూట్ కూడా రాయాలి! యూజర్ తప్పుగా టైప్ చేసినప్పుడు — బ్రౌజర్ ఎర్రర్ పాపప్లో మీరు title లో రాసిన వివరణను స్పష్టంగా చూపిస్తుంది.
బ్రౌజర్ ఇచ్చే డిఫాల్ట్ ఇంగ్లీష్ ఎర్రర్ మెసేజ్ కాకుండా, మన స్వంత తెలుగు భాషలో లేదా ప్రత్యేక శైలిలో ఎర్రర్ సందేశం ఇవ్వడానికి జావాస్క్రిప్ట్ లోని setCustomValidity() మెథడ్ను ఉపయోగిస్తాం:
<form>
<label for="telugu-mail">ఈమెయిల్ రాయండి:</label><br>
<input type="email" id="telugu-mail" required
oninvalid="this.setCustomValidity('దయచేసి మీ సరైన ఈమెయిల్ అడ్రస్ నమోదు చేయండి!')"
oninput="this.setCustomValidity('')"
style="padding: 8px; width: 300px; margin-top: 4px;">
<button type="submit" style="padding: 8px 14px;">సబ్మిట్</button>
</form>
💡 గమనిక: oninput="this.setCustomValidity('')" అని రాయడం మర్చిపోకూడదు; అలా రాయకపోతే యూజర్ సరైన ఈమెయిల్ టైప్ చేసిన తర్వాత కూడా ఎర్రర్ క్లియర్ అవ్వదు.
యూజర్ టైప్ చేస్తున్నప్పుడు అతను టైప్ చేసినది సరైనదైతే పచ్చటి బోర్డర్ (Green Border), తప్పుగా ఉంటే ఎర్రటి బోర్డర్ (Red Border) ప్రత్యక్షమయ్యేలా ఆధునిక CSS సూడో-క్లాసెస్తో అద్భుతమైన ఫీడ్బ్యాక్ ఇవ్వవచ్చు:
<style>
/* డేటా సరైన ఫార్మాట్లో ఉన్నప్పుడు పచ్చటి బోర్డర్ */
input:focus:valid {
border: 2px solid #10b981;
background-color: #f0fdf4;
outline: none;
}
/* డేటా తప్పుగా ఉన్నప్పుడు ఎర్రటి బోర్డర్ */
input:focus:invalid {
border: 2px solid #ef4444;
background-color: #fef2f2;
outline: none;
}
</style>
<form style="max-width: 400px; padding: 16px;">
<label for="v-mail">ఈమెయిల్ (టైప్ చేసి గ్రీన్/రెడ్ బోర్డర్ గమనించండి):</label><br>
<input type="email" id="v-mail" required placeholder="test@example.com"
style="width: 100%; padding: 8px; border: 1px solid #cbd5e1; border-radius: 6px; margin-top: 6px;">
</form>
కొన్ని ప్రత్యేక సందర్భాలలో మనం HTML5 డిఫాల్ట్ వాలిడేషన్ను ఆపివేయాల్సి వస్తుంది (ఉదాహరణకు: ఫారమ్ను సగం నింపి "Save Draft" బటన్ నొక్కినప్పుడు, లేదా డెవలపర్ తన స్వంత జావాస్క్రిప్ట్ వాలిడేషన్ను అమలు చేయాలనుకున్నప్పుడు):
<form novalidate>: పూర్తి ఫారమ్కు బ్రౌజర్ వాలిడేషన్ను శాశ్వతంగా ఆపివేస్తుంది.<button formnovalidate>: కేవలం ఆ ఒక్క నిర్దిష్ట బటన్ కోసం మాత్రమే వాలిడేషన్ను దాటవేస్తుంది (ఉదాహరణకు: "సేవ్ డ్రాఫ్ట్" లేదా "రద్దు చేయండి" బటన్).
<form action="/submit" method="POST">
<input type="email" name="mail" required>
<!-- ఈ బటన్ వాలిడేషన్ లేకుండానే సబ్మిట్ అవుతుంది -->
<button type="submit" formnovalidate name="action" value="draft" style="background:#64748b; color:white; padding:8px 12px;">
డ్రాఫ్ట్గా భద్రపరచండి
</button>
<!-- ఈ బటన్ వాలిడేషన్ పూర్తి అయితేనే సబ్మిట్ అవుతుంది -->
<button type="submit" name="action" value="publish" style="background:#10b981; color:white; padding:8px 12px;">
ప్రచురించండి
</button>
</form>
HTML5 వాలిడేషన్ నిబంధనల పూర్తి సారాంశ పట్టిక:
| ఆట్రిబ్యూట్ | అనుకూల ఇన్పుట్ టైప్స్ | లక్ష్యం & ప్రవర్తన |
|---|---|---|
required |
text, email, password, radio, checkbox, file, select | ఫీల్డ్ ఖాళీగా ఉండకూడదు. కనీసం ఒక ఎంపిక జరగాలి. |
minlength / maxlength |
text, password, search, url, tel, textarea | టెక్స్ట్లోని అక్షరాల కనిష్ట మరియు గరిష్ట సంఖ్యను నియంత్రిస్తుంది. |
min / max |
number, range, date, time, datetime-local, month | సంఖ్యా విలువ లేదా క్యాలెండర్ తేదీ పరిధిని నిర్దేశిస్తుంది. |
step |
number, range, date, time | విలువ పెరగాల్సిన/తగ్గాల్సిన అంతరాన్ని (గ్రాన్యులారిటీ) నిర్ణయిస్తుంది. |
pattern |
text, password, tel, email, search, url | రెగ్యులర్ ఎక్స్ప్రెషన్ (Regex) నమూనాతో ఖచ్చితమైన పోలికను తనిఖీ చేస్తుంది. |
ఏ యూజర్ అయినా బ్రౌజర్ డెవలపర్ టూల్స్ ఓపెన్ చేసి required లేదా pattern ఆట్రిబ్యూట్ను డిలీట్ చేసేసి ఫారమ్ సబ్మిట్ చేయగలడు. క్లయింట్ వాలిడేషన్ కేవలం యూజర్ సౌకర్యం కోసమే; సర్వర్-సైడ్ సెక్యూరిటీ వాలిడేషన్ నూటికి నూరు శాతం తప్పనిసరి!
కేవలం pattern="[A-Z]{5}[0-9]{4}[A-Z]{1}" ఇస్తే యూజర్ తప్పు చేసినప్పుడు బ్రౌజర్ "Please match the requested format" అని గందరగోళమైన మెసేజ్ ఇస్తుంది. title="పాన్ కార్డ్ నంబర్ రాయండి" ఇస్తేనే యూజర్కు అర్థమవుతుంది.
ఒక ఇన్పుట్కు disabled ఉంటే బ్రౌజర్ దాని required వాలిడేషన్ను లెక్కించదు మరియు సర్వర్కు పంపదు.
జావాస్క్రిప్ట్ Regex లో ^ మరియు $ అవసరం. కానీ HTML5 pattern ఆట్రిబ్యూట్ బై-డిఫాల్ట్గా పూర్తి స్ట్రింగ్ను సరిపోలుస్తుంది; కాబట్టి ^[0-9]+$ బదులు నేరుగా [0-9]+ రాస్తే సరిపోతుంది.
జావాస్క్రిప్ట్ లో కస్టమ్ ఎర్రర్ సెట్ చేసిన తర్వాత oninput="this.setCustomValidity('')" తో ఖాళీ చేయకపోతే ఫారమ్ ఎప్పటికీ సబ్మిట్ కాదు!
ఈ అధ్యాయంలో మీరు నేర్చుకున్న విషయాలను స్వయంగా పరీక్షించుకోండి. ప్రతి ప్రశ్నను చదివి సమాధానం ఆలోచించిన తర్వాత "సమాధానం చూడండి" పై క్లిక్ చేయండి:
❓ ప్రశ్న 1: క్లయింట్-సైడ్ మరియు సర్వర్-సైడ్ వాలిడేషన్లలో ఏది భద్రతకు ప్రామాణికమైనది?
❓ ప్రశ్న 2: ఖచ్చితంగా 6 అంకెల పిన్కోడ్ కోసం ఏ pattern రాయాలి?
pattern="[1-9][0-9]{5}" (మొదటి అంకె 1-9 మరియు తర్వాతి 5 అంకెలు 0-9).
❓ ప్రశ్న 3: ఇన్పుట్ సరైన ఫార్మాట్లో ఉన్నప్పుడు CSS లో ఏ సూడో-క్లాస్ యాక్టివేట్ అవుతుంది?
:valid (తప్పుగా ఉన్నప్పుడు :invalid).
❓ ప్రశ్న 4: పూర్తి ఫారమ్కు బ్రౌజర్ వాలిడేషన్ను నిలిపివేయడానికి <form> లో ఏ ఆట్రిబ్యూట్ వాడతారు?
novalidate ఆట్రిబ్యూట్.
❓ ప్రశ్న 5: pattern లో రాసిన నమూనా తప్పుగా ఉన్నప్పుడు యూజర్కు అర్థమయ్యేలా సూచన ఇవ్వడానికి ఏ ఆట్రిబ్యూట్ వాడాలి?
title="..." ఆట్రిబ్యూట్.
పైన వివరించిన required, pattern, minlength, మరియు CSS :valid/:invalid కలర్ బోర్డర్లతో కూడిన కోడ్ను మన ఆన్లైన్ ఎడిటర్లో ఓపెన్ చేసి తప్పుడు డేటాతో సబ్మిట్ చేసి బ్రౌజర్ వాలిడేషన్ మ్యాజిక్ను చూడండి!
📌 క్విక్ సారాంశం (Key Takeaways):
- జీరో-జావాస్క్రిప్ట్: బ్రౌజర్ నేటివ్ స్థాయిలోనే తక్షణ ఎర్రర్ పాపప్స్ అందిస్తుంది.
- required: తప్పనిసరిగా నింపాల్సిన ఫీల్డ్స్ కోసం.
- pattern: Regex తో కస్టమ్ నమూనాలు (పిన్కోడ్, పాన్, మొబైల్).
- title: ఎర్రర్ పాపప్లో యూజర్-ఫ్రెండ్లీ సూచనల కోసం.
- CSS సూడో-క్లాసెస్:
:validమరియు:invalidతో లైవ్ గ్రీన్/రెడ్ విజువల్స్.
మనం HTML ఫారమ్స్, అన్ని ఆధునిక ఇన్పుట్స్, డ్రాప్డౌన్లు, రేడియోలు మరియు క్లయింట్-సైడ్ వాలిడేషన్ను సంపూర్ణంగా పూర్తి చేశాం! తర్వాతి అధ్యాయంలో మనం మన కోర్సు యొక్క ఫైనల్ ఫేజ్ అయిన Phase 05: అడ్వాన్స్డ్ మెటాడేటా, వెబ్ స్టోరేజ్, పర్ఫార్మెన్స్ & యాక్సెసిబిలిటీ లోకి అడుగుపెడదాం! Chapter 17: SEO మెటాడేటా, ఓపెన్ గ్రాఫ్ (Open Graph) & ట్విట్టర్ కార్డ్స్ తో నెక్స్ట్ లెవెల్ నాలెడ్జ్ నేర్చుకుందాం!