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
array_find, array_any und array_all in PHP 8.4 – Arrays durchsuchen ohne Schleife
„Gibt es einen inaktiven Eintrag?", „Sind alle bezahlt?", „Hol mir den ersten Treffer" – dafür hast du bisher eine foreach-Schleife mit break geschrieben. PHP 8.4 macht daraus je eine Zeile, die genau sagt, was sie meint.
First-Class-Callable-Syntax in PHP: aus strlen(...) wird ein echter Wert
Funktionen als Zeichenketten weiterzureichen – 'strlen', [$objekt, 'methode'] – hat nie jemand gemocht: kein Tippfehlerschutz, keine Sprungmarke in der IDE. Seit PHP 8.1 schreibst du drei Punkte und bekommst ein Closure-Objekt.
Dateirechte verstehen – was 755 und 644 wirklich bedeuten
chmod 777 löst jedes Rechteproblem – und schafft ein größeres. Die drei Ziffern sind kein Zauberspruch, sondern eine simple Addition. Wer sie einmal verstanden hat, rät nie wieder.