is_numeric()
Die Funktion is_numeric() ist eine eingebaute PHP-Funktion, die prüft, ob eine Variable numerisch ist oder nicht.
Einführung
is_numeric() ist eine eingebaute PHP-Funktion, die prüft, ob ein Wert eine Zahl oder ein numerischer String ist. Letzteres ist der entscheidende Grund für ihre Existenz: PHP empfängt Zahlen häufig als Strings — aus Formularfeldern, Query-Parametern, JSON, CSV-Dateien — und man braucht eine zuverlässige Methode, um zu fragen „Könnte dies als Zahl behandelt werden?", bevor man damit rechnet. is_numeric() beantwortet genau diese Frage und gibt einen boolean zurück.
Diese Seite behandelt die Syntax, was als numerisch gilt (und was überraschenderweise nicht), wie sie sich von is_int() und is_float() unterscheidet, und ein praktisches Eingabevalidierungsmuster.
Syntax
is_numeric(mixed $value): boolDie Funktion nimmt ein einziges Argument, $value, und gibt true zurück, wenn $value eine Zahl oder ein numerischer String ist, andernfalls false. Sie wirft niemals eine Ausnahme und verändert ihr Argument nicht.
Einfaches Beispiel
$var1 ist der String "42", $var2 ist der Float 3.14, und $var3 ist der String "hello". Die ersten beiden sind numerisch, daher gibt is_numeric() true zurück; der dritte ist es nicht.
Tipp: Verwende
var_dump()stattechobeim Testen von boolean-Werten.echogibttrueals"1"undfalseals leeren String aus, was leicht missverstanden werden kann.var_dump()gibtbool(true)/bool(false)aus, sodass das Ergebnis eindeutig ist.
Was als numerisch gilt
Ein String ist numerisch, wenn er eine gültige Ganzzahl oder Fließkommazahl in Dezimal- oder wissenschaftlicher Notation darstellt. Dazu gehören ein führendes Vorzeichen, ein führender oder nachfolgender Dezimalpunkt, umgebende Leerzeichen und Exponenten:
<?php
var_dump(is_numeric("1e3")); // bool(true) — scientific notation (1000)
var_dump(is_numeric("+42")); // bool(true) — leading sign
var_dump(is_numeric("-0.5")); // bool(true) — negative float
var_dump(is_numeric(".5")); // bool(true) — leading decimal point
var_dump(is_numeric(" 42")); // bool(true) — leading whitespace
var_dump(is_numeric("0x1A")); // bool(false) — hex strings are NOT numeric (since PHP 7)
var_dump(is_numeric("0b101")); // bool(false) — binary strings are not numeric
var_dump(is_numeric("")); // bool(false) — empty string
var_dump(is_numeric("42px")); // bool(false) — trailing non-numeric characters
?>Die häufigen Fallstricke:
- Hex- und Binär-Strings geben
falsezurück."0x1A"war vor PHP 7 numerisch, ist es aber nicht mehr. Numerische Literale im Code (z. B.0x1A) sind bereits echte Ganzzahlen, daher erkenntis_numeric()eine einfache int und gibttruezurück. - Ein nachfolgendes Einheitenzeichen macht den gesamten String nicht-numerisch.
"42px"ergibtfalse. Wenn du eine Zahl aus einem solchen String extrahieren musst, verwende stattdessen den Cast(int)oderfilter_var(). - Führende/nachfolgende Leerzeichen werden toleriert (nachfolgende Leerzeichen wurden in PHP 8.0 erlaubt).
is_numeric() vs. is_int() und is_float()
Diese drei Funktionen werden leicht verwechselt. Der Unterschied liegt darin, ob der Typ wichtig ist oder nur der Wert:
<?php
$value = "10"; // a string that looks like a number
var_dump(is_numeric($value)); // bool(true) — value can be a number
var_dump(is_int($value)); // bool(false) — type is string, not int
var_dump(is_float($value)); // bool(false) — type is string, not float
?>is_numeric()interessiert sich für den Wert: „Könnte dies eine Zahl sein?" Sie akzeptiert numerische Strings.is_int()undis_float()interessieren sich für den deklarierten Typ: Sie geben nurtruefür ein tatsächlichesintoderfloatzurück, niemals für einen String.
Greife auf is_numeric() zurück, wenn du Eingaben validierst, die als Text ankommen; greife auf is_int() / is_float() zurück, wenn du wirklich den Typ einer Variable kennen musst.
Praxisanwendung: Eingabe vor Berechnungen validieren
Der typische Einsatzzweck von is_numeric() in der Praxis ist die Absicherung von Rechenoperationen auf nicht vertrauenswürdigen Eingaben, um TypeErrors oder stille 0-Werte zu vermeiden:
<?php
$inputs = ["100", "12.5", "5e2", "abc", "12px", ""];
foreach ($inputs as $in) {
if (is_numeric($in)) {
echo "$in is numeric -> " . ($in + 0) . "\n";
} else {
echo "$in is NOT numeric\n";
}
}
// 100 is numeric -> 100
// 12.5 is numeric -> 12.5
// 5e2 is numeric -> 500
// abc is NOT numeric
// 12px is NOT numeric
// is NOT numeric
?>Das Hinzufügen von + 0 (oder das Casten mit (int) / (float)) konvertiert den validierten String in eine echte Zahl, sobald man weiß, dass es sicher ist. Für eine strengere Validierung — beispielsweise nur Ganzzahlen akzeptieren oder einen Bereich anwenden — kombiniere es mit filter_var() und den Filtern FILTER_VALIDATE_INT / FILTER_VALIDATE_FLOAT.
Fazit
is_numeric() sagt zuverlässig, ob ein Wert — einschließlich eines Strings — als Zahl behandelt werden kann, was es zur richtigen Absicherung vor Rechenoperationen mit Daten aus Formularen, URLs oder Dateien macht. Denke daran, dass es false für Hex-/Binär-Strings und für Strings mit nicht-numerischen nachfolgenden Zeichen zurückgibt, und dass es den Wert prüft, nicht den Typ — verwende is_int() oder is_float(), wenn der deklarierte Typ entscheidend ist. Siehe auch gettype() und PHP Data Types für das größere Bild.