முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 8 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 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ஏற்றுகிறது…

`validate(obj, rules)` என்பதை வரையறுக்கவும்: ஒவ்வொரு விதியையும் பயன்படுத்தவும் (function obj -> string|null) மற்றும் விதிகளின் அதே வரிசையில், பூஜ்யமற்ற செய்திகளை மட்டும் கொண்ட வரிசையை வழங்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

Rules.map((r) => r(obj)).filter((m) => m !== null)

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#js.m8.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

தொழிற்சாலை `required(field)` என்பதை வரையறுக்கவும்: obj[field] வெறுமையாக இருந்தால் (பூஜ்யமாக இல்லை, வரையறுக்கப்படவில்லை, வெற்று சரம் அல்ல), இல்லையெனில் '<field> obbligatorio' என்ற சரத்தை வழங்கினால், ஒரு பொருளைக் கொடுத்தால் அது பூஜ்யத்தை வழங்கும் விதியை வழங்குகிறது.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

obj[field] என்று ஒரு மூடுதலைத் திரும்பவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்