JS වලින් Date Validation කරමු

JavaScriptවලදි වලංගු දිනයක් පරීක්ෂා කරන්න ඕන වුණාම ඔයා මොකද කරන්නේ? විශේෂයෙන්ම user input වලින් “2025-40-12” වගේ වැරදි දත්තයක් ආවොත්?

Frontend එකක මේක කරද්දි Datepicker එකක් දාන්න පුළුවන් වුණාට, API එකකට backend request එකක් විදියට ඕනම විදියක value එකක් එන්න පුළුවන්. (එහෙම එන්නෙ කොහොමද, 40 මාසයක් තියෙනවා කියලා හිතන ලොන්තපෝල් ඇටගෙවල නාකි රතු බූන්දියෙක් ඉන්න පුළුවන්ද කියලා Developmentවලට අත්පොත් තියන කාලෙ හිතුණට critical systemsවල මේ හැම scenario එකක්ම validate කරන්න වෙනවා).

අපිට ලේසියෙන්ම මෙහෙම check කරන්න පුළුවන්:

const date = new Date("2025-40-12");

console.log(!isNaN(date)) // false
Advertisement

Date object එකට null එකක් එන්නෙ නෑ කියලා හිතුවොත්, !isNaN(date) එකෙන් වැඩේ වෙනවා. මොකද, වැරදි date එකක් දුන්නාම Date() එකෙන් “Invalid Date” කියලා එනවා. එතකොට ඒක Number එකක් නෙවෙයිද කියලා බලලා තමයි false එක ගන්නේ.

ඒත් අවුලක් තියෙනවා

හැබැයි, “2025-02-30” වගේ string එකක් Date object එකකට convert කළාම, JavaScript වලින් auto-correct කරන්න පුළුවන්. එතකො​ට:

new Date("2025-02-30")
// → 2025-03-02
// 😬 ඔයාට වැරදි date එකක් valid කියලා එනවා.

Zod වලින් කරන්නේ මෙහෙමයි

Zod (JS validation library) එකක් භාවිතා කරන කෙනෙක්ට මෙන්න හොඳ trick එකක්:

const dateSchema = z
  .string()
  .regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid format (must be YYYY-MM-DD)")
  .refine((dateStr) => {
    const date = new Date(dateStr);
    return (
      !isNaN(date.getTime()) &&
      date.toISOString().slice(0, 10) === dateStr
    );
  }, {
    message: "Invalid date",
  });

➡️ මේකෙන් පරීක්ෂා කරන්නේ:

1. ආවේ String එකක්ද,

2. Regex වලින් බලනවා YYYY-MM-DD ෆෝමැට් එකෙන් තියෙනවාද කියලා

3. Original string එකත් real calendar date එකක් ද?

උදාහරණයක් විදිහට “2025-40-12” වගේ format correct උනාට, මෙය valid date එකක් නෙමෙයි. ඒක මේ comparison එකෙන් හඳුනාගන්න පුළුවන්!

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

You cannot copy content of this page