Dieses Projekt enthält die Klasse Validation, mit der Formularübergaben anhand von Regelmengen überprüft werden können.
include_once dirname(__FILE__) . '/../Assistants/vendor/Validation/Validation.php';
// ab hier wird ein neuer Regelsatz für $_POST['action'] definiert,
// wobei das Feld nur die Werte 'SetPassword' und 'SetAccountInfo' haben darf
// oder nicht existieren darf (sodass es zu 'noAction' wird)
$val = Validation::open($_POST)
->addSet('action',
array('set_default'=>'noAction',
'satisfy_in_list'=>array('noAction', 'SetPassword', 'SetAccountInfo'),
'on_error'=>array('type'=>'error',
'text'=>'unbekannte Aktion')));
$result = $val->validate(); // liefert die Ergebnismenge
if ($val->isValid()){
// $_POST['action'] erfüllt die Regelmenge und kann genutzt werden
echo $result['action'];
} else {
// wenn die Eingabe nicht validiert werden konnte, können hier die
// Fehlermeldungen behandelt werden
$notifications = $val->getNotifications();
}
Sie können mit diesen Funktionen die Elemente der Eingabe auswählen, welche dann die definierten Regeln
erfüllen sollen. Dabei gibt es Selektoren mit den Präfixen key_
und elem_
.
key_
=> wählt die ELemente anhand des Schlüssels (aus einem Array)
elem_
=> wählt die ELemente anhand des Wertes (aus einem Array)
Übersicht | |||
---|---|---|---|
key | key_list | key_all | key_regex |
key_numeric | key_integer | key_min_numeric | key_max_numeric |
key_starts_with | key_union | key_intersection |
// Das Feld $_POST['elem'] soll ein gültiger md5-Hash sein.
$val = Validation::open($_POST);
$val->addSet(['key' => 'elem'],
['valid_md5']);
Man kann ['key' => 'elem']
auch als 'elem'
schreiben.
// Die Felder a, b, und c aus $_POST sollen ein gültiger md5-Hash sein.
$val = Validation::open($_POST);
$val->addSet(['key_list' => ['a', 'b', 'c']],
['valid_md5']);
// Alle Elemente des Arrays $_POST['externalId'] sollen einen regulären Ausdruck erfüllen.
// Dazu wird das Array mit perform_this_array durchlaufen und bei der Auswahl der Felder
// sind dann alle (key_all) erlaubt.
$val = Validation::open($_POST);
$val->addSet('externalId',
['perform_this_array'=>[[['key_all'],
['satisfy_regex'=>'%^([a-zA-Z0-9_]+)$%']]]]);
// Es werden die Felder aus $_POST ausgewählt, welche den Ausdruck %^([a-zA-Z0-9_]+)$% erfüllen.
$val = Validation::open($_POST);
$val->addSet(['key_regex' => '%^([a-zA-Z0-9_]+)$%'],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, welche vom Typ Integer sind oder eine Ganzzahl
// darstellen (als String).
$val = Validation::open($_POST);
$val->addSet(['key_numeric'],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, welche vom Typ Integer sind.
$val = Validation::open($_POST);
$val->addSet(['key_integer'],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, welche mindestens den Schlüsselwert 100 besitzen.
$val = Validation::open($_POST);
$val->addSet(['key_min_numeric' => 100],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, welche maximal den Schlüsselwert 100 besitzen.
$val = Validation::open($_POST);
$val->addSet(['key_max_numeric' => 100],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, deren Schlüssel mit abc beginnt.
$val = Validation::open($_POST);
$val->addSet(['key_starts_with' => 'abc'],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, deren Schlüssel mit aaa oder bbb beginnen.
$val = Validation::open($_POST);
$val->addSet(['key_union' => ['key_starts_with' => 'aaa',
'key_starts_with' => 'bbb']],
['valid_md5']);
// Es werden die Felder aus $_POST ausgewählt, welche mindestens den Schlüsselwert 100 besitzen und mit '2' beginnen.
$val = Validation::open($_POST);
$val->addSet(['key_intersection' => ['key_min_numeric' => '100',
'key_starts_with' => '2']],
['valid_md5']);
siehe satisfy_isset
siehe satisfy_not_isset
siehe satisfy_isset
// das Feld $_POST['action'] muss gesetzt sein
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_isset'));
// das Feld $_POST['action'] darf nicht gesetzt sein
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_not_isset'));
// das Feld $_POST['action'] darf nicht leer sein
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_not_empty'));
siehe php:empty
// das Feld $_POST['action'] muss leer sein
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_empty'));
siehe php:empty
Aufbau |
---|
satisfy_equals_field=>param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | der Bezeichner des Feldes, welches gleich sein soll |
// das Feld $_POST['newPasswordRepeat'] soll den selben Inhalt
// wie das Feld $_POST['newPassword'] haben
$val = Validation::open($_POST);
$val->addSet('newPasswordRepeat',
array('satisfy_equals_field'=>'newPassword'));
Aufbau |
---|
satisfy_not_equals_field=>param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | der Bezeichner des Feldes, welches nicht gleich sein soll |
// das Feld $_POST['deleteSheetWarning'] darf nicht den selben
// Inhalt wie das Feld $_POST['deleteSheet'] haben
$val = Validation::open($_POST);
$val->addSet('deleteSheetWarning',
array('satisfy_not_equals_field'=>'deleteSheet'));
Aufbau |
---|
satisfy_regex => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | regulärer Ausdruck |
// das Feld $_POST['key'] muss den regulären Ausdruck
// %^([a-zA-Z0-9_]+)$% erfüllen
$val = Validation::open($_POST);
$val->addSet('key',
array('satisfy_regex'=>'%^([a-zA-Z0-9_]+)$%'));
siehe php:PCRE
siehe satisfy_value
Aufbau |
---|
satisfy_min_numeric => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Minimalwert |
// das Feld $_POST['field'] soll >= 0 sein
$val = Validation::open($_POST);
$val->addSet('field',
array('satisfy_min_numeric'=>0));
Aufbau |
---|
satisfy_max_numeric => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Maximalwert |
// das Feld $_POST['field'] soll <= 100 sein
$val = Validation::open($_POST);
$val->addSet('field',
array('satisfy_max_numeric'=>100));
Aufbau |
---|
satisfy_exact_numeric => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Vergleichswert |
// das Feld $_POST['field'] soll genau 50 sein
$val = Validation::open($_POST);
$val->addSet('field',
array('satisfy_exact_numeric'=>50));
Aufbau |
---|
satisfy_min_len => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Mindestlänge |
// die Länge des Feldes $_POST['newPassword']
// soll >= 6 sein
$val = Validation::open($_POST);
$val->addSet('newPassword',
array('satisfy_min_len'=>6));
Aufbau |
---|
satisfy_max_len => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Maximallänge |
// die Länge des Feldes $_POST['newPassword']
// soll <= 255 sein
$val = Validation::open($_POST);
$val->addSet('newPassword',
array('satisfy_max_len'=>255));
Aufbau |
---|
satisfy_exact_len => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | string/integer/float | Vergleichswert |
// die Länge des Feldes $_POST['newPassword']
// soll genau 8 sein
$val = Validation::open($_POST);
$val->addSet('newPassword',
array('satisfy_exact_len'=>8));
Aufbau |
---|
satisfy_in_list => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | array(val0,val1, ... ) | Liste der Vergleichswerte |
val | mixed | Vergleichswerte |
// das Feld $_POST['action'] soll einen der
// Werte 'SetPassword' oder 'SetAccountInfo' enthalten
// und wenn es nicht gesetzt ist 'noAction'
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_in_list'=>array('noAction', 'SetPassword', 'SetAccountInfo')));
Aufbau |
---|
satisfy_not_in_list => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | array(val0,val1, ... ) | Liste der Vergleichswerte |
val | mixed | Vergleichswerte |
// das Feld $_POST['action'] darf nicht die Werte
// 'SetPassword' oder 'SetAccountInfo' haben
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_not_in_list'=>array('SetPassword', 'SetAccountInfo')));
Aufbau |
---|
satisfy_value => param |
Parameter | Typ | Beschreibung |
---|---|---|
param | mixed | Vergleichswert |
// das Feld $_POST['action'] muss den
// Wert -1 haben
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_value'=>'-1'));
// die hochgeladene Datei in $_FILES['MarkingFile']
// soll existieren
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_exists']);
siehe php:file_exists
// die notwendigen Felder der hochgeladenen Datei
// sollen in $_FILES['MarkingFile'] gesetzt sein
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_isset']);
Aufbau |
---|
satisfy_file_extension => param oder satisfy_file_extension => array(param,param,...) |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | Dateiendung |
// die hochgeladene Datei in $_FILES['MarkingFile'] soll
// die Dateiendung .zip besitzen
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_extension'=>'zip']);
Aufbau |
---|
satisfy_file_mime => param oder satisfy_file_mime => array(param,param,...) |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | Strukturtyp |
// die hochgeladene Datei in $_FILES['MarkingFile'] soll
// den Strukturtyp application/zip haben
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_mime'=>'application/zip']);
siehe mime-Typen
// nicht implementiert
Aufbau |
---|
satisfy_file_name => param oder satisfy_file_name => array(param,param,...) |
Parameter | Typ | Beschreibung |
---|---|---|
param | string | Dateiname |
// die hochgeladene Datei in $_FILES['MarkingFile'] soll
// den Dateiname upload.zip haben
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_name'=>'upload.zip']);
// die hochgeladene Datei in $_FILES['MarkingFile'] darf
// im Dateinamen nur die Zeichen a-z,A-z,0-9 und .-_ enthalten
$val = Validation::open($_FILES);
$val->addSet('MarkingFile',
['satisfy_file_name_strict']);
// wandelt $_POST['field'] in eine Gleitkommazahl um
$val = Validation::open($_POST);
$val->addSet('field',
['to_float']);
// wandelt $_POST['field'] in einen String um
$val = Validation::open($_POST);
$val->addSet('field',
['to_string']);
// wandelt $_POST['externalTypeName'] in
// Kleinbuchstaben um
$val = Validation::open($_POST);
$val->addSet('externalTypeName',
['to_lower']);
// wandelt $_POST['externalTypeName'] in
// Großbuchstaben um
$val = Validation::open($_POST);
$val->addSet('externalTypeName',
['to_upper']);
$val = Validation::open($_POST);
$val->addSet('externalType',
['to_integer',
'satisfy_in_list' => [1,2]]);
$val = Validation::open($_POST);
$val->addSet('field',
['to_boolean']);
// kodiert $_POST['field'] mittels md5
$val->addSet('field',
['to_md5');
siehe php:md5
// kodiert $_POST['field'] mittels sha1
$val->addSet('field',
['to_sha1');
siehe php:sha1
// kodiert $_POST['field'] mittels base64
$val->addSet('field',
['to_base64');
siehe php:base64_encode
// wandelt das base64 kodierte Feld $_POST['field']
// in einen String um
$val->addSet('field',
['to_string_from_base64');
siehe php:base64_decode
// $_POST['elem'] soll im json-Format serialisiert werden
$val = Validation::open($_POST);
$val->addSet('elem',
array('to_json'));
siehe php:json_encode
// $_POST['startDate'] soll in einen unix-Zeitstempel umgewandelt werden
$val = Validation::open($_POST);
$val->addSet('startDate',
array('satisfy_exists',
'to_timestamp'));
Aufbau |
---|
on_error => array(type,text,abortSet) |
Parameter | Typ | Beschreibung | Vorgabewert |
---|---|---|---|
type (optional) | string | Bezeichner für den Meldungstyp (Bsp.: warning, error oder message) | message |
text (optional) | string | Meldungstext | |
abortSet (optional) | bool | true = im Fehlerfall die Validierung beenden, false = sonst | true |
// das Feld $_POST['action'] soll existieren, ansonsten
// soll eine Fehlermeldung generiert werden
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_exists',
'on_error'=>array('type'=>'error',
'text'=>'unbekannte Aktion')));
siehe on_success
Aufbau |
---|
on_error => array(type,text,abortSet) |
Parameter | Typ | Beschreibung | Vorgabewert |
---|---|---|---|
type (optional) | string | Bezeichner für den Meldungstyp (Bsp.: warning, error oder message) | message |
text (optional) | string | Meldungstext | |
abortSet (optional) | bool | true = im Fehlerfall die Validierung beenden, false = sonst | false |
// wenn das Feld $_POST['action'] existiert, soll eine
// Erfolgsmeldung erzeugt werden (kein Abbruch)
$val = Validation::open($_POST);
$val->addSet('action',
array('satisfy_exists',
'on_success'=>array('text'=>'Aktion existiert')));
// das Feld $_POST['key'] darf entweder ein gültiger identifier
// oder der leere String sein
$val = Validation::open($_POST);
$val->addSet('key',
array('logic_or'=>[['satisfy_value'=>''],
['valid_identifier']]));
// alle Schlüssel des Arrays $_POST['approvalCondition'] sollen gültige
// identifier sein und alle darin enthaltenen Elemente zwischen
// 0 und 100 liegen
$val = Validation::open($_POST);
$val->addSet('approvalCondition',
array('set_default'=>array(),
'perform_this_foreach'=>[['key',
['valid_identifier']],
['elem',
['to_integer',
'satisfy_min_numeric'=>0,
'satisfy_max_numeric'=>100]]]));
// die Elemente des Arrays $_POST['proposal'] sollen
// gültige identifier sein
$val = Validation::open($_POST);
$val->addSet('proposal',
['perform_this_array'=>[[['key_all'],
['valid_identifier']]]]);
// es sollen die Felder $_POST['elem']['proposal'] und
// $_POST['elem']['marking'] geprüft werden
$val = Validation::open($_POST);
$val->addSet('elem',
['perform_switch_case'=>[['proposal',
[...]],
['marking',
[...]]]]);
// die URL in $_POST['url'] wird mit filter_var($elem, FILTER_SANITIZE_URL) behandelt
$val = Validation::open($_POST);
$val->addSet('url',
array('sanitize_url'));
siehe php:empty
// alle Elemente in $_GET werden bereinigt, mit htmlspecialchars(trim($elem), ENT_QUOTES, 'UTF-8')
$val = Validation::open($_GET, array('preRules'=>array('sanitize')));
// wenn der Wert $_POST['action'] nicht gesetzt ist
// soll er 'noAction' sein
$val = Validation::open($_POST);
$val->addSet('action',
array('set_default'=>'noAction'));
// erstellt das Feld $_POST['newField'] und kopiert
// dort $_POST['oldField'] hinein
$val = Validation::open($_POST);
$val->addSet('oldField',
array('set_copy'=>'newField'));
// setzt den Wert des Feldes $_POST['field']
// auf 1234
$val = Validation::open($_POST);
$val->addSet('field',
array('set_value'=>'1234'));
// setzt den Wert des Feldes $_POST['field']
// auf $_POST['otherField']
$val = Validation::open($_POST);
$val->addSet('field',
array('set_field_value'=>'otherField'));
// es wird das Feld $_POST['field'] ausgewählt und anschließend die
// Validierung abgebrochen (kann auch auf false gesetzt werden).
// Dabei ignorieren manche Befehle diesen Fehlerwert und werden trotzdem ausgeführt
// (Bsp.: Fehlermeldungen).
$val = Validation::open($_POST);
$val->addSet('field',
array('set_error'=>true));
// das Feld $_POST['email'] soll eine gültige EMail-Adresse enthalten
$val = Validation::open($_POST);
$val->addSet('email',
['valid_email']);
// das Feld $_POST['back'] soll eine gültige URL enthalten
$val = Validation::open($_POST);
$val->addSet('back',
['valid_url']);
siehe php:empty
// das Feld $_POST['back'] soll eine gültige, relative URL enthalten
$val = Validation::open($_POST);
$val->addSet('back',
['valid_url_query']);
// das Feld $_POST['regex'] soll einen gültigen regulären Ausdruck enthalten
$val = Validation::open($_POST);
$val->addSet('regex',
['valid_regex']);
siehe php:empty Es wird der Filter FILTER_VALIDATE_REGEXP verwendet.
// das Feld $_POST['hash'] soll einen gültigen Hashwert enthalten
$val = Validation::open($_POST);
$val->addSet('hash',
['valid_hash']);
// das Feld $_POST['hash'] soll einen gültigen md5-Hashwert enthalten
$val = Validation::open($_POST);
$val->addSet('hash',
['valid_md5']);
// das Feld $_POST['hash'] soll einen gültigen sha1-Hashwert enthalten
$val = Validation::open($_POST);
$val->addSet('hash',
['valid_sha1']);
// das Feld $_POST['sortId'] darf nur 0-9 und _ enthalten
$val = Validation::open($_POST);
$val->addSet('sortId',
array('valid_identifier'));
siehe valid_userName
siehe valid_integer
// das Feld $_POST['elem'] darf nur a-z, A-Z und Leerzeichen enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_alpha'));
// das Feld $_POST['elem'] darf nur a-z und A-Z enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_alpha_space'));
// das Feld $_POST['elem'] darf nur 0-9 enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_integer'));
// das Feld $_POST['elem'] darf nur 0-9, a-z und A-Z enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_alpha_numeric'));
// das Feld $_POST['elem'] darf nur 0-9, a-z, A-Z und Leerzeichen enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_alpha_space_numeric'));
// das Feld $_POST['elem'] muss gültiges json enthalten
$val = Validation::open($_POST);
$val->addSet('elem',
array('valid_json'));
// das Feld $_POST['elem'] soll vom Typ float sein oder sich darin umwandeln lassen
$val = Validation::open($_POST);
$val->addSet('elem',
array('is_float'));
// das Feld $_POST['elem'] soll einen gültigen Wahrheitswert darstellen
$val = Validation::open($_POST);
$val->addSet('elem',
array('is_boolean'));
// das Feld $_POST['elem'] soll einen gültigen Zahlwert darstellen oder darin umgewandelt werden können
$val = Validation::open($_POST);
$val->addSet('elem',
array('is_integer'));
// das Feld $_POST['elem'] soll einen gültigen String darstellen
$val = Validation::open($_POST);
$val->addSet('elem',
array('is_string'));
// das Feld $_POST['rights'] muss ein Array sein
$val = Validation::open($_POST);
$val->addSet('rights',
array('is_array'));