Eingaben validieren mit filter_var – E-Mail, URL und Zahlen
Nie blind einer Nutzereingabe vertrauen. filter_var prüft E-Mail-Adressen, URLs und Zahlen mit eingebauten Filtern – zuverlässiger und lesbarer als selbstgebaute Regex.
E-Mail-Adressen mit einer selbstgebauten Regex zu prüfen, geht fast immer daneben – der offizielle Standard ist erstaunlich kompliziert. PHP bringt mit filter_var fertige, gut getestete Filter mit. Nutze sie, statt das Rad neu zu erfinden.
E-Mail und URL prüfen
filter_var gibt den geprüften Wert zurück – oder false, wenn er ungültig ist:
$mail = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);
if ($mail === false) {
http_response_code(422);
exit('Ungültige E-Mail-Adresse');
}
$url = filter_var($_POST['website'] ?? '', FILTER_VALIDATE_URL);Zahlen sicher einlesen
Bei Zahlen ist die Tücke: "5" ist gültig, aber auch "5abc" würde ein einfaches (int) klaglos zu 5 machen. filter_var mit Bereichsgrenzen ist strenger:
$alter = filter_var($_POST['alter'] ?? '', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 0, 'max_range' => 120],
]);
if ($alter === false) {
exit('Bitte ein Alter zwischen 0 und 120 angeben');
}Der häufigste Fehler
Vorsicht bei der 0: FILTER_VALIDATE_INT liefert für die Eingabe "0" den Wert int(0) – und 0 ist in PHP „falsy". Prüfe deshalb immer streng mit === false, nicht mit if (!$alter), sonst verwirfst du die gültige Null.
Wichtig zur Einordnung: filter_var prüft das Format, nicht die Echtheit. Ob eine E-Mail-Adresse wirklich existiert, sagt dir erst eine Bestätigungsmail. Und für die Ausgabe brauchst du weiterhin htmlspecialchars, für die Datenbank Prepared Statements.
Saubere Eingabevalidierung ist die erste Verteidigungslinie jeder Anwendung. Solche Backends baue ich – schau auf bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Beträge und Zahlen in PHP formatieren – number_format, sprintf und Intl
1234.5 ist keine Anzeige, sondern ein Wert. Auf der Rechnung soll 1.234,50 € stehen, in der API 1234.50 und im Dateinamen 1234-50. Drei Aufgaben, drei Werkzeuge – und ein Fehler, den fast jeder einmal macht.
Benannte Argumente in PHP 8 – Schluss mit true, false, null, true
Ein Aufruf wie erstelle($a, true, false, null, true) sagt nichts darüber, was die Wahrheitswerte bedeuten. Mit benannten Argumenten steht es im Aufruf – und optionale Parameter lassen sich überspringen.
Reguläre Ausdrücke in PHP – benannte Gruppen statt $m[3]
Ein Treffer-Array aus Zahlen liest sich nach zwei Wochen wie eine Geheimschrift. Benannte Gruppen geben jedem Teil einen Namen – und preg_replace_callback ersetzt damit Dinge, die kein einfacher Ersetzungsstring kann.