Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP is_numeric(): Numerische Werte sicher prüfen – Syntax, Beispiele & Best Practices

Sie befinden sich: Home > Php Tutorial > Praxisleitfaden:...

Praxisleitfaden: Zahlenvalidierung mit PHP is_numeric()


Eintrag am:  26.05.2025
Hits / Besucher:  108
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Jeder Entwickler muss regelmäßig prüfen, ob Werte wirklich numerisch sind. Die Funktion is_numeric() ist dabei das zentrale Werkzeug in PHP. In diesem Leitfaden erfährst du alles, was du über is_numeric() wissen musst.

Modernes Titelbild für einen Blogartikel zur PHP-Funktion is_numeric() mit abstrahiertem PHP-Logo, Eingabefeldern für verschiedene Werte und dem Text „PHP is_numeric(): Zahlen zuverlässig erkennen“.

1. Einleitung: Was ist is_numeric() und warum ist sie wichtig?

is_numeric() prüft, ob ein Wert als Zahl gilt. In PHP brauchst du das, weil viele Daten als String ankommen – zum Beispiel aus Formularen, APIs oder Konfigurationsdateien.

Wenn du Werte nicht sicher prüfst, riskierst du unerwartete Fehler oder Schwachstellen. Hier liest du, was is_numeric() genau macht, worauf du achten musst und wie sich die Funktion von ähnlichen Prüfmöglichkeiten unterscheidet.

2. Grundlagen der PHP is_numeric()-Funktion

Bevor du is_numeric() einsetzt, solltest du die grundlegende Funktionsweise kennen.

2.1. Syntax

Die Syntax ist bewusst einfach gehalten.

/** Prüft, ob ein Wert numerisch ist */ 

$bErgebnis = is_numeric($mWert);

2.2. Parameter

is_numeric() benötigt genau einen Parameter.

  • $mWert (mixed): Jeder Wert, den du prüfen möchtest – egal ob String, Integer, Float, Boolean, Array oder Objekt.

2.3. Rückgabewert

Die Funktion liefert ein boolsches Ergebnis.

  • TRUE – wenn der Wert eine Zahl oder ein numerischer String ist
  • FALSE – in allen anderen Fällen

2.4. Definition von „numerisch“ für is_numeric()

Was gilt für is_numeric() als „numerisch“? Die Antwort ist überraschend vielseitig.

  • Ganzzahlen (Integer): z.B. 42, -7

  • Gleitkommazahlen (Float): z.B. 3.14, -0.5

  • Numerische Strings:

    • Zahlen als Strings, z.B. "123", "-42"
    • Floats als Strings, z.B. "3.14159"
    • Wissenschaftliche Notation, z.B. "1.23e4" oder "7.1E-10"

Wichtig:
Auch Strings mit Vorzeichen oder Exponenten erkennt is_numeric() als numerisch. Beispiele: "+123", "-45", "2.5e3".

3. is_numeric() in der Praxis: Detaillierte Beispiele

Die Funktion is_numeric() reagiert auf verschiedene Datentypen unterschiedlich. Sieh dir die folgenden Fälle und die jeweilige Ausgabe von var_dump() an.

3.1. Standard-Datentypen

In der Praxis prüfst du meist klassische Werte: Integer, Float, Strings.

$aTestwerte = [ 
42,
3.14159,
"123",
"3.14",
"-99",
"Hallo",
true,
null,
[],
new stdClass()
];


foreach($aTestwerte as $mWert) {

/** Gibt Wert und Ergebnis der Prüfung aus */

var_dump($mWert, is_numeric($mWert));

}

Erwartete Ausgaben:

  • Integer: TRUE
  • Float: TRUE
  • Numerische Strings (“123”, “3.14”, “-99”): TRUE
  • Nicht-numerische Strings (“Hallo”): FALSE
  • Boolean, NULL, Array, Objekt: FALSE

3.2. Spezielle numerische String-Formate

Auch ausgefallenere numerische Schreibweisen prüft is_numeric() korrekt.

var_dump(is_numeric("+123")); /** TRUE */ 

var_dump(is_numeric("-45.67")); /** TRUE */

var_dump(is_numeric("1.23e5")); /** TRUE */

var_dump(is_numeric("7.1E-10")); /** TRUE */

Diese Vielfalt macht is_numeric() zu einem sehr flexiblen Werkzeug.

3.3. Randfälle und unerwartetes Verhalten (PHP-Versionsspezifisch)

Nicht jeder Fall verhält sich intuitiv – vor allem zwischen verschiedenen PHP-Versionen gibt es Unterschiede.

Hexadezimal-Strings

In PHP < 7.0.0 galten hexadezimale Strings wie "0xf4c3b00c" als numerisch.
Seit PHP 7.0.0 gilt: Hexadezimal-Strings sind nicht numerisch.

var_dump(is_numeric("0xf4c3b00c")); // PHP < 7.0.0: TRUE | PHP >= 7.0.0: FALSE 

Binäre und oktale Strings

Werte wie "0b1010" (binär) oder "0123" (oktal) erkennt is_numeric() nicht als numerisch, da diese nur als Integer-Literal, nicht aber als String numerisch sind.

var_dump(is_numeric("0b1010")); // Immer FALSE 

var_dump(is_numeric("0123")); // Immer TRUE (da nur Ziffern), aber nicht als Oktal erkannt!

Leerzeichen

Leerzeichen am Anfang oder in der Mitte führen immer zu FALSE.
Am Ende des Strings kommt es auf die PHP-Version an:

var_dump(is_numeric("42 ")); /* PHP < 8.0.0: FALSE | PHP >= 8.0.0: TRUE */


var_dump(is_numeric(" 42")); // Immer FALSE

var_dump(is_numeric("4 2")); // Immer FALSE

Leere Strings, NULL, Boolean, Array, Objekt

Leere Strings, NULL, Boolean, Arrays und Objekte erkennt is_numeric() immer als nicht numerisch.

var_dump(is_numeric("")); // FALSE 

var_dump(is_numeric(null)); // FALSE

var_dump(is_numeric(true)); // FALSE

var_dump(is_numeric([])); // FALSE

var_dump(is_numeric(new stdClass())); // FALSE

Visuelle Hilfe: Verhaltenstabelle

Mit dieser Tabelle erkennst du auf einen Blick, wie is_numeric() auf verschiedene Eingabewerte und Spezialfälle reagiert – inklusive PHP-Versionsunterschieden.

Eingabe Erwartetes Ergebnis Hinweise / Version
123 TRUE Integer
“123” TRUE String, nur Ziffern
“3.14” TRUE Float-String
“-42” TRUE Vorzeichen
“+7.1E-10” TRUE Exponent
“0xf4c3b00c” FALSE Seit PHP 7.0.0
“0b1010” FALSE Nie numerisch
"42 " TRUE/FALSE Seit PHP 8.0.0 TRUE
" 42" FALSE Immer FALSE
“4 2” FALSE Immer FALSE
“” FALSE Leer
null FALSE NULL
true/false FALSE Boolean
[] FALSE Array
new stdClass() FALSE Objekt

4. is_numeric() vs. ctype_digit() vs. filter_var(): Wann welche Funktion nutzen?

Nicht jede Zahlenprüfung ist gleich. Je nach Kontext gibt es bessere oder schlechtere Methoden. Vergleiche daher die wichtigsten Funktionen.

4.1. is_numeric()

Setze is_numeric() ein, wenn du beliebige numerische Werte oder Strings prüfen möchtest, egal ob Ganzzahl, Float, Dezimalpunkt, Vorzeichen oder wissenschaftliche Notation.

4.2. ctype_digit()

Nutze ctype_digit(), um zu prüfen, ob ein String nur aus Dezimalziffern besteht. Das Ergebnis ist nur dann TRUE, wenn alle Zeichen Ziffern sind – keine Vorzeichen, kein Dezimalpunkt, kein Exponent!

var_dump(ctype_digit("123")); // TRUE 

var_dump(ctype_digit("00123")); // TRUE

var_dump(ctype_digit("-123")); // FALSE

var_dump(ctype_digit("3.14")); // FALSE

4.3. filter_var() mit FILTER_VALIDATE_INT und FILTER_VALIDATE_FLOAT

Mit filter_var() validierst du präziser und kannst zugleich den Wert umwandeln.
Für Ganzzahlen:

/** Prüft, ob ein Wert ein Integer ist */ 

$bIstGanzzahl = filter_var("42", FILTER_VALIDATE_INT) !== false; // TRUE

$bIstGanzzahlNegativ = filter_var("-42", FILTER_VALIDATE_INT) !== false; // TRUE

Für Gleitkommazahlen:

$bIstFloat = filter_var("3.14", FILTER_VALIDATE_FLOAT) !== false; // TRUE 

$bIstFloatMitKomma = filter_var("3,14", FILTER_VALIDATE_FLOAT, ["options" => ["decimal" => ","]]) !== false; /* TRUE, mit dezimalem Komma */

4.4. Vergleichstabelle

Die Tabelle zeigt auf einen Blick, worin sich die Funktionen unterscheiden. So kannst du je nach Anwendungsfall gezielt entscheiden, welche Methode am besten passt.

Funktion Erkennt Schwächen/Besonderheiten Ideal für
is_numeric() Integer, Float, numerische Strings, Exponent Erlaubt viele Formate, z. B. “+3.14”, “2e3” Allgemeine Zahlenprüfung
ctype_digit() Nur positive Integer-Strings (Ziffern) Keine Vorzeichen, kein Punkt, kein Exponent IDs, Mengenangaben
filter_var() (INT/FLOAT) Integer/Float, mit strikter Typprüfung Lehnt numerische Strings mit Leerzeichen ab Validierung und Umwandlung

5. Häufige Fehler und Best Practices

Viele Stolperfallen ergeben sich durch falsche Annahmen oder Versionsunterschiede. Hier findest du die wichtigsten Tipps.

5.1. Missverständnisse

  • ctype_digit() prüft keine negativen Zahlen oder Floats! Viele verwechseln ctype_digit() mit einer universellen Zahlenprüfung.
  • Hexadezimale Strings: Das Verhalten von is_numeric() hat sich seit PHP 7 geändert. Prüfe genau, welche PHP-Version du einsetzt.
  • Leerzeichen: Sei vorsichtig bei Benutzereingaben mit führenden oder nachgestellten Leerzeichen.

5.2. Best Practices

  • Validierungsbedarf analysieren: Entscheide zuerst, welche Zahlenformate du erlauben willst.
  • Spezifische Checks: Kombiniere is_numeric() mit weiteren Prüfungen, z.B. floatval() oder intval(), um Typkonvertierungen zu sichern.
  • filter_var() für komplexe Validierungen: Wenn du z.B. einen Wertebereich prüfen willst oder bestimmte Formatierungen brauchst, nutze filter_var().

6. Anwendungsfälle in der Praxis

Der Alltag liefert viele typische Szenarien, bei denen du is_numeric() sicher einsetzen kannst.

6.1. Formularvalidierung

Nutzer geben z.B. ihr Alter oder den Preis ein. Hier prüfst du zuerst, ob der Wert überhaupt eine Zahl ist, bevor du ihn speicherst oder verarbeitest.

if (isset($_POST['sAlter']) && is_numeric($_POST['sAlter'])) { 

$iAlter = intval($_POST['sAlter']);

/** Weiterverarbeitung z.B. speichern oder vergleichen */

}

6.2. API-Eingangsdatenvalidierung

Viele APIs erwarten numerische Parameter. Prüfe eingehende Werte direkt:

if (is_numeric($sApiWert)) { 

$dApiWert = floatval($sApiWert);

/** Wert weiterverwenden */

}

6.3. Datenbank-Interaktionen

Sichere SQL-Abfragen verlangen, dass du nur gültige numerische Werte in die Datenbank schreibst.

if (is_numeric($sPreis)) { 

$sSql = "INSERT INTO produkte (preis) VALUES (" . floatval($sPreis) . ")";

/** Query absetzen */

}

6.4. Konfigurationsdateien

Liest du Einstellungen aus INI- oder JSON-Dateien, prüfe deren numerischen Inhalt, um Fehler frühzeitig zu vermeiden.

if (is_numeric($sTimeout)) { 

$iTimeout = intval($sTimeout);

/** Wert anwenden */

}

7. Fazit

Mit is_numeric() prüfst du zuverlässig, ob Werte in PHP numerisch sind – egal, ob es sich um Zahlen, Floats oder passende Strings handelt.

Du solltest die Funktion immer bewusst wählen und im Zweifel mit weiteren Checks ergänzen, wenn dein Anwendungsfall mehr Präzision erfordert.

Für einfache Zahlenprüfungen reicht is_numeric() aus, aber für strikte Typen oder Bereichsvalidierung empfiehlt sich der Einsatz von filter_var().

So stellst du sicher, dass deine Anwendung robust und sicher mit numerischen Werten umgeht – und bist gewappnet für unerwartete Eingaben.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.