Direkt zum Hauptinhalt springen
eLearner.app
Modul 8 · Lektion 3 von 431/32 im Kurs~15 min
Lektionen des Moduls (3/4)

Herausforderung: Datenvalidator

Die Validierung von Eingabedaten gehört zu den häufigsten Aufgaben: Kein Formular und keine API kann blind den empfangenen Daten vertrauen. Wir bauen einen kleinen Validator, der kombinierbare Regeln nutzt und alle gefundenen Fehler zurückgibt, nicht nur den ersten.

Eine Regel = Eine Funktion

Eine Regel erhält das Objekt und gibt null (alles in Ordnung) oder einen String mit der Fehlermeldung zurück.

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

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

Mehrere Regeln kombinieren

Der Validator führt alle Regeln aus und sammelt die Fehlermeldungen:

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

Im funktionalen Stil:

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

Entscheiden, ob die Daten gültig sind

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

Nützliches Pattern: Regel-Factory

Wenn du viele Felder mit der gleichen Logik validieren musst, schreibe eine Factory:

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)];

Jede Factory gibt eine bereits konfigurierte Regelfunktion zurück. Das ist im Grunde wie ein Parser-Generator oder ein Validator wie Zod, nur in klein.

Probier es aus

Übung#js.m8.l3.e1
Versuche: 0Wird geladen…

Definiere `validate(obj, rules)`: Wendet jede Regel (Funktion obj -> string|null) an und gibt ein Array zurück, das nur die Nicht-Null-Fehlermeldungen in der Reihenfolge der Regeln enthält.

Editor wird geladen…
Hinweis anzeigen

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

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m8.l3.e2
Versuche: 0Wird geladen…

Definiere die Factory `required(field)`: Gibt eine Regel zurück, die für ein gegebenes Objekt null zurückgibt, wenn obj[field] nicht leer ist (weder null, noch undefined, noch ein leerer String), andernfalls die Zeichenkette '<field> obbligatorio'.

Editor wird geladen…
Hinweis anzeigen

Ritorna una closure che legge obj[field].

Lösung nach 3 Versuchen verfügbar