الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 3 من 431/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 -> سلسلة | فارغة) وإرجاع مصفوفة تحتوي فقط على الرسائل غير الفارغة، بنفس ترتيب القواعد.

جارٍ تحميل المحرر…
إظهار التلميح

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

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m8.l3.e2
المحاولات: 0جارٍ التحميل…

حدد المصنع `required(field)``: فهو يُرجع القاعدة التي، في حالة وجود كائن، تُرجع فارغة إذا كان obj[field] غير فارغ (ليس فارغًا، وليس غير محدد، وليس سلسلة فارغة)، وإلا فإن السلسلة '<field> obbligatorio'.

جارٍ تحميل المحرر…
إظهار التلميح

قم بإرجاع إغلاق يقرأ obj[field].

الحل متاح بعد 3 من المحاولات