W3docs

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): bool

Die 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

php— editable, runs on the server

$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() statt echo beim Testen von boolean-Werten. echo gibt true als "1" und false als leeren String aus, was leicht missverstanden werden kann. var_dump() gibt bool(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 false zurück. "0x1A" war vor PHP 7 numerisch, ist es aber nicht mehr. Numerische Literale im Code (z. B. 0x1A) sind bereits echte Ganzzahlen, daher erkennt is_numeric() eine einfache int und gibt true zurück.
  • Ein nachfolgendes Einheitenzeichen macht den gesamten String nicht-numerisch. "42px" ergibt false. Wenn du eine Zahl aus einem solchen String extrahieren musst, verwende stattdessen den Cast (int) oder filter_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() und is_float() interessieren sich für den deklarierten Typ: Sie geben nur true für ein tatsächliches int oder float zurü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.

Übungen

Übung
Was macht die Funktion is_numeric in PHP?
Was macht die Funktion is_numeric in PHP?
Was this page helpful?