ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 4లో పాఠం 3కోర్సులో 31/32~15 min
మాడ్యూల్ పాఠాలు (3/4)

ఛాలెంజ్: డేటా వాలిడేటర్

ఇన్‌పుట్ డేటాను ధృవీకరించడం అనేది మీరు తరచుగా చేసే పనులలో ఒకటి: ఫారమ్ లేదు, ఏ API గుడ్డిగా చేయదు అది ఏమి పొందుతుందో విశ్వసించండి. కంపోజబుల్ నియమాలు మరియు మిళితం చేసే చిన్న వ్యాలిడేటర్‌ను రూపొందిద్దాం మొదటిది మాత్రమే కాకుండా కనుగొనబడిన అన్ని లోపాలను అందిస్తుంది.

ఒక నియమం = ఒక విధి

ఒక నియమం ఆబ్జెక్ట్‌ని తీసుకుంటుంది మరియు null (అన్నీ మంచివి) లేదా స్ట్రింగ్ని దోష సందేశంతో అందిస్తుంది.

JS
const nomeRichiesto = (utente) =>
  utente.nome && utente.nome.length > 0 ? null : 'nome obbligatorio';

const etaMaggiore = (utente) => (utente.eta >= 18 ? null : 'devi essere maggiorenne');

బహుళ నియమాలను కంపోజ్ చేయడం

వ్యాలిడేటర్ అన్ని నియమాలను అమలు చేస్తుంది మరియు లోపాలను సేకరిస్తుంది:

JS
function valida(utente, regole) {
  const errori = [];
  for (const regola of regole) {
    const msg = regola(utente);
    if (msg) errori.push(msg);
  }
  return errori;
}

క్రియాత్మక శైలి:

JS
const valida = (obj, regole) => regole.map((r) => r(obj)).filter((m) => m !== null);

అది చెల్లుబాటవుతుందో లేదో నిర్ణయించడం

JS
const errori = valida(utente, [nomeRichiesto, etaMaggiore]);
const ok = errori.length === 0;

ఉపయోగకరమైన నమూనా: రూల్ ఫ్యాక్టరీ

ఒకే లాజిక్‌తో ధృవీకరించడానికి మీకు అనేక ఫీల్డ్‌లు ఉన్నప్పుడు, ఫ్యాక్టరీని వ్రాయండి:

JS
const richiesto = (campo) => (obj) =>
  obj[campo] != null && obj[campo] !== '' ? null : `${campo} obbligatorio`;

const minimo = (campo, n) => (obj) => (obj[campo] >= n ? null : `${campo} deve essere >= ${n}`);

const regole = [richiesto('nome'), richiesto('email'), minimo('eta', 18)];

ప్రతి ఫ్యాక్టరీ ముందుగా కాన్ఫిగర్ చేసిన రూల్ ఫంక్షన్ని అందిస్తుంది. ఇది ఖచ్చితంగా పార్సర్‌ని ఉపయోగించడం లాంటిది జెనరేటర్ లేదా Zod వంటి వాలిడేటర్, కేవలం సూక్ష్మ రూపంలో.

దీనిని ప్రయత్నించండి

వ్యాయామం#js.m8.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

`ధృవీకరణ(obj, నియమాలు)`ని నిర్వచించండి: ప్రతి నియమాన్ని (ఫంక్షన్ obj -> స్ట్రింగ్|శూన్య) వర్తింపజేయండి మరియు నిబంధనల ప్రకారం అదే క్రమంలో శూన్య సందేశాలను మాత్రమే కలిగి ఉన్న శ్రేణిని తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

నియమాలు.map((r) => r(obj)).filter((m) => m !== null)

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#js.m8.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఫ్యాక్టరీ `అవసరం(ఫీల్డ్)`ని నిర్వచించండి: ఇది obj[ఫీల్డ్] ఖాళీగా ఉంటే (శూన్యం కాదు, నిర్వచించబడదు, ఖాళీ స్ట్రింగ్ కాదు), లేకుంటే '<field> obbligatorio' అనే స్ట్రింగ్‌ని అందించినట్లయితే, ఆబ్జెక్ట్ ఇచ్చినప్పుడు అది శూన్యతను తిరిగి ఇస్తుంది.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

obj[ఫీల్డ్] అని చదివే మూసివేతను తిరిగి ఇవ్వండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది