12require_once
$root . DIRECTORY_SEPARATOR .
'include' . DIRECTORY_SEPARATOR .
'dbxValidator.class.php';
16$assert =
static function (
bool $condition,
string $message): void {
18 fwrite(STDERR,
"FAIL: {$message}\n");
24$assert(
$result[
'valid'] ===
false,
'ungueltige E-Mail wurde akzeptiert');
25$assert(
$result[
'code'] ===
'invalid_format',
'falscher E-Mail-Fehlercode');
28$assert(count(
$validator->getErrors()) === 1,
'strukturierter Fehler wurde nicht gespeichert');
29$assert(count(
$validator->getErrorMessages()) === 1,
'lesbare Fehlermeldung wurde nicht gespeichert');
33$assert(
$required[
'message'] ===
'Bitte füllen Sie dieses Feld aus.',
'deutsche Benutzermeldung fehlt');
37$assert(
$requiredEn[
'message'] ===
'Please fill in this field.',
'englische Benutzermeldung fehlt');
41$assert(
$formatEs[
'message'] ===
'Introduzca un valor válido.',
'spanische Benutzermeldung fehlt');
44$assert(
$validator->getLanguage() ===
'de',
'automatische Fallback-Sprache ist nicht Deutsch');
49 'bestehende min=1-Pflichtregel funktioniert nicht'
53$assert(
$optional[
'valid'] ===
true,
'optionales leeres Feld ist nicht mehr rueckwaertskompatibel');
54$assert(
$validator->getErrors() === [],
'Fehler des vorherigen Laufs wurden nicht geloescht');
56$assert(!
$validator->validate(
'0',
'email'),
'0 umgeht weiterhin die E-Mail-Regel');
58$assert(!
$validator->validate(
false,
'email'),
'boolean false umgeht weiterhin die E-Mail-Regel');
61$assert(
$validator->validate(
false,
'boolean'),
'boolean false wurde als Boolean abgelehnt');
62$assert(
$validator->validate(
true,
'boolean'),
'boolean true wurde als Boolean abgelehnt');
65$assert(
$trimmed[
'valid'] ===
true,
'trim-Regel wird nicht vor der E-Mail-Pruefung angewendet');
66$assert(
$trimmed[
'normalized'] ===
'name@example.org',
'normalisierter trim-Wert ist falsch');
67$assert(!
$validator->validate(
' name@example.org ',
'required|email'),
'E-Mail wurde ohne trim still bereinigt');
69$assert(
$validator->validate(
'2026-07-23 12:34:56',
'datetime'),
'gueltiger Zeitstempel wurde abgelehnt');
70$assert(
$validator->validate(
'2026-07-23 12:34:56.123456',
'timestamp'),
'Mikrosekunden wurden abgelehnt');
71$assert(!
$validator->validate(
'2026-07-23 12:34:56abc',
'datetime'),
'Anhang am Zeitstempel wurde akzeptiert');
72$assert(!
$validator->validate(
'2026-07-23 24:00:00',
'datetime'),
'Stunde 24 wurde akzeptiert');
73$assert(!
$validator->validate(
'2026-07-23 23:60:00',
'datetime'),
'Minute 60 wurde akzeptiert');
74$assert(!
$validator->validate(
'2026-07-23 23:59:60',
'datetime'),
'Sekunde 60 wurde akzeptiert');
75$assert(!
$validator->validate(
'2026-02-30 12:00:00',
'datetime'),
'ungueltiges Kalenderdatum wurde akzeptiert');
76$assert(
$validator->validate(
'2026-07-23',
'*|date'),
'historische *|date-Regel wurde gebrochen');
77$assert(!
$validator->validate(
'kein-datum',
'*|date'),
'*|date wertet die konkrete Datumsregel nicht aus');
79$assert(
$validator->validate(
'äöü',
'varchar|max=3'),
'Unicode-Laenge wird weiterhin als Byte-Laenge geprueft');
82$assert((
$unicode[
'details'][
'actual'] ??
null) === 3,
'Unicode-Zeichenanzahl im Ergebnis ist falsch');
84$assert(
$validator->validate(
'9223372036854775807',
'bigint'),
'groesster BIGINT wurde abgelehnt');
85$assert(
$validator->validate(
'-9223372036854775808',
'bigint'),
'kleinster BIGINT wurde abgelehnt');
87$assert(
$bigint[
'valid'] ===
false &&
$bigint[
'code'] ===
'invalid_range',
'BIGINT-Ueberlauf wurde akzeptiert');
88$assert(!
$validator->validate(
'-9223372036854775809',
'bigint'),
'negativer BIGINT-Ueberlauf wurde akzeptiert');
89$assert(
$validator->validate(
'Sicher! 123',
'password|min=8|max=32'),
'Passwort-Regel lehnt erlaubte Zeichen ab');
91$array =
$validator->validateResult([
'ok',
'nicht ok'],
'array|required|parameter',
'selection');
92$assert(
$array[
'valid'] ===
false &&
$array[
'code'] ===
'invalid_array_item',
'Array-Fehler wurde nicht erkannt');
93$assert((
$array[
'details'][
'index'] ??
null) === 1,
'Index des fehlerhaften Array-Eintrags fehlt');
95 (
$array[
'details'][
'item'][
'code'] ??
'') ===
'invalid_format',
96 'Fehlerdetails des Array-Eintrags fehlen'
99$assert(
$validator->validate(
'*',
'parameter+*'),
'bestehende Extra-Zeichen-Regel wurde gebrochen');
100$assert(
$validator->validate([
'raw' => [
'nested']],
'*'),
'historische Vollpass-Regel akzeptiert nicht mehr jeden Wert');
104$assert(!empty(
$invalidRule[
'details'][
'invalid']),
'ungueltiger Regelteil fehlt im Ergebnis');
106echo
"OK: Strukturierte Validator-Ergebnisse, Typgrenzen, required/trim und Unicode sind korrekt.\n";
Zentrale, strikt pruefende Eingabevalidierung.
if(!defined( 'IMG_WEBP')) define( 'IMG_WEBP'