Validierung

1. Einleitung

Die Validierung von Daten finden in einer Applikation in der Regel an mehreren Stellen statt. Benutzer-Eingaben werden zunächst in einem Formular validiert, bei der Verarbeitung von Datenbank-Inhalten im Hintergrund kann ebenfalls eine Validierung sinnvoll sein.

Das APF stellt zur Validierung von Formular-Eingaben zahlreiche Validatoren zur Verfügung. Eine Übersicht erhalten Sie auf der Seite Formulare. Die dort beschriebenen Formular-Validatoren nutzen zu einem großen Teil die mit dem APF ausgelieferten Validator-Implementierungen zur Ausführung der eigentlichen Logik.

2. Definition und Implementierung

Ein Validator definiert sich über das Interface APF\tools\validation\Validator:

PHP-Code
interface Validator { public function isValid($subject); }

Die Methode isValid() liefert im Erfolgsfall true, ist die Eingabe fehlerhaft, den Wert false.

Zur Prüfung einer Eingabe auf eine gültige Zahl ist folgende Implementierung notwendig:

PHP-Code
class IntegerValidator implements Validator { public function isValid($subject) { $input = trim($subject); if ($input === (string) (int) $input) { return true; } return false; } }

Die Anwendung gestaltet sich wie folgt:

PHP-Code
(new IntegerValidator())->isValid(5);
Möchten Sie auf Basis des Validator-Interfaces eigene Validatoren implementieren, so können Sie diese mit beliebigen Konfigurations-Optionen über den Konstruktor und/oder zusätzliche Setter ausstatten.

3. Verfügbare Validatoren

Die folgenden Kapitel beschreiben die mit dem APF ausgelieferten Validatoren und deren Funktionsweise.

3.1. EMailValidator

Der EMailValidator kümmert sich um die Prüfung von E-Mail-Adressen. Er verfügt über zwei Regelsätze, die bei Bedarf angepasst werden können. Dazu übergeben Sie den gewünschten Regelsatz einfach bei der Erzeugung des Validators.

Die Regel EMailValidator::RULE_SIMPLE führt eine einfache Prüfung durch, mit EMailValidator::RULE_COMPLEX wird eine strikter am RFC 822 orientierte Regel ausgeführt. Möchten Sie eine eigene Regel definieren, so übergeben Sie hierzu bitte einen regulären Ausdruck im Konstruktor.

Beispiel:

PHP-Code
// Einfache Validierung (new EMailValidator())->isValid('foo@bar.de'); (new EMailValidator(EMailValidator::RULE_SIMPLE))->isValid('foo@bar.de'); // RFC 822 Validierung (new EMailValidator(EMailValidator::RULE_COMPLEX))->isValid('foo@bar.de'); // Eigene Validierung (new EMailValidator('/^([a-zA-Z0-9\.\_\-@]+)$/'))->isValid('foo@bar.de');

3.2. IntegerValidator

Der IntegerValidator prüft, ob die Eingabe eine gültige Zahl ist. Der Validator bietet keine weitere Konfiguration an.

Beispiel:

PHP-Code
(new IntegerValidator())->isValid(5);

3.3. NumberScopeValidator

Mit dem NumberScopeValidator lassen sich Zahlen auf verschiedene Arten validieren:

  • Erfüllen eines Mindest-Wertes. Wird der Parameter $minValue mit 0 initialisiert, so gilt keine Begrenzung.
  • Unterschreiten eines Maximal-Wertes. Wird der Parameter $maxValue mit 0 initialisiert, so gilt keine Begrenzung.
  • Erfüllen eines Wertebereichs.

Zusätzlich zu den genannten Prüfungsmöglichkeiten bietet der Validator folgende Konfigurationsmöglichkeiten an:

  • Mit dem Parameter $onlyIntegersAccepted lässt sich die Prüfung auf Integer-Zahlen einschränken.
  • $includeLowerEnd definiert, ob der zu prüfende Wert auf dem unteren Ende eines Wertebereichs liefen darf.
  • $includeUpperEnd definiert, ob der zu prüfende Wert auf dem oberen Ende eines Wertebereichs liefen darf.

Beispiel:

PHP-Code
// Einfacher Test (new NumberScopeValidator())->isValid(5) // Test auf Mindestwert (new NumberScopeValidator(5))->isValid(6)); // Test auf Maximalwert (new NumberScopeValidator(null, 5))->isValid(4)); // Test auf Einhaltung eines Bereichs (new NumberScopeValidator(3, 5))->isValid(4)); // Test auf Einhaltung eines Bereichs mit Einschluss des unteren Rands (new NumberScopeValidator(3, 5, false, true))->isValid(4)); // Test auf Einhaltung eines Bereichs mit Einschluss des oberen Rands (new NumberScopeValidator(3, 5, false, false, true))->isValid(4)); // Test auf Einhaltung eines Bereichs mit Einschluss beider Ränder (new NumberScopeValidator(3, 5, false, true, true))->isValid(3)); // Test auf Integer-Zahlen (new NumberScopeValidator(3, 5, true, true, true))->isValid(3));

3.4. PhoneNumberValidator

Der PhoneNumberValidator kümmert sich um die Prüfung von Telefon-Nummern. Er verfügt über drei Regelsätze, die bei Bedarf angepasst werden können. Dazu übergeben Sie den gewünschten Regelsatz einfach bei der Erzeugung des Validators.

Es sind folgende Regelsätze vorhanden:

  • PhoneNumberValidator::STANDARD (Standard): Mit dieser Regel lassen sich die meißten Telefonnummern korrekt validieren.
  • PhoneNumberValidator::INTERNATIONAL: Nutzen Sie diese Regel um internationale Telefonnummern zu validieren.
  • PhoneNumberValidator::INTERNATIONAL_EPP: Möchten Sie internationale Telefonnummern nach dem EPP-Standard validieren, so nutzen Sie bitte diese Regel.

Möchten Sie eine eigene Regel definieren, so übergeben Sie hierzu bitte einen regulären Ausdruck im Konstruktor.

Beispiel:

PHP-Code
// Einfache Prüfung (new PhoneNumberValidator())->isValid('+49 (87) 69490555'); // Prüfung einer internationalen Telefonnummer (new PhoneNumberValidator(PhoneNumberValidator::INTERNATIONAL))->isValid('+1 855 192 5323'); // Prüfung einer internationalen Telefonnummer nach EPP-Standard (new PhoneNumberValidator(PhoneNumberValidator::INTERNATIONAL_EPP))->isValid('+44.02436596672');

3.5. TextLengthValidator

Mit Hilfe des TextLengthValidator lassen sich Zeichenketten auf die Einhaltung bestimmter Längenvorgaben prüfen. Zur Konfiguration bietet der Validator folgende Parameter an:

  • $minLength: Definiert die Mindestlänge der Zeichenkette, die eingehalten werden muss.
  • $maxLength: Definiert die Maximallänge, die eigehalten werden muss. Wird diese mit 0 definiert, gilt keine Begrenzung.
  • $mode (optional): Über den Modus lässt sich definieren, ob die eingegebene Zeichenkette inklusive ihrer führenden und nachfolgenden Leerzeichen geprüft wird (TextLengthValidator::MODE_LAX) oder ob die Zeichenkette zuvor bereinigt wird (TextLengthValidator::MODE_STRICT).

Beispiel:

PHP-Code
// Test auf Mindestlänge (new TextLengthValidator(3, 0))->isValid('Lorem ipsum')); // Test auf Maximallänge (new TextLengthValidator(0, 3))->isValid('Lorem ipsum')); // Test eines Längenbereichs (new TextLengthValidator(3, 11))->isValid('Lorem ipsum')); // Test eines Längenbereichs ohne führende und nachfolgende Leerzeichen (new TextLengthValidator(3, 11, TextLengthValidator::MODE_STRICT))->isValid('Lorem ipsum'));

3.5. UriValidator

Mit dem UriValidator lassen sich URLs auf Gültigkeit prüfen. Der Validator bietet keine weitere Konfiguration an.

Beispiel:

PHP-Code
(new UriValidator())->isValid('http://example.com/foo/bar');

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.