W3docs

is_numeric()

La fonction is_numeric() en PHP vérifie si une variable est numérique ou non, qu'il s'agisse d'un nombre ou d'une chaîne numérique.

Introduction

is_numeric() est une fonction PHP intégrée qui teste si une valeur est un nombre ou une chaîne numérique. Ce dernier point est la raison principale de son existence : PHP reçoit souvent des nombres sous forme de chaînes — depuis des champs de formulaire, des paramètres de requête, du JSON, des fichiers CSV — et vous avez besoin d'un moyen fiable de demander « cette valeur pourrait-elle être traitée comme un nombre ? » avant d'effectuer des calculs dessus. is_numeric() répond exactement à cette question et retourne un boolean.

Cette page couvre la syntaxe, ce qui est considéré comme numérique (et ce qui, de façon surprenante, ne l'est pas), les différences avec is_int() et is_float(), et un schéma pratique de validation des entrées.

Syntaxe

is_numeric(mixed $value): bool

Elle prend un seul argument, $value, et retourne true si $value est un nombre ou une chaîne numérique, et false dans le cas contraire. Elle ne lève jamais d'exception et ne modifie jamais son argument.

Exemple de base

php— editable, runs on the server

$var1 est la chaîne "42", $var2 est le float 3.14, et $var3 est la chaîne "hello". Les deux premières sont numériques, donc is_numeric() retourne true ; la troisième ne l'est pas.

Conseil : Utilisez var_dump() plutôt que echo pour tester les booléens. echo affiche true sous la forme "1" et false sous la forme d'une chaîne vide, ce qui est facile à mal interpréter. var_dump() affiche bool(true) / bool(false), ce qui rend le résultat sans ambiguïté.

Ce qui est considéré comme numérique

Une chaîne est numérique lorsqu'elle représente un entier ou un float valide en notation décimale ou scientifique. Cela inclut un signe en tête, un point décimal en début ou en fin, des espaces blancs autour, et des exposants :

<?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
?>

Les erreurs courantes :

  • Les chaînes hexadécimales et binaires retournent false. "0x1A" était numérique avant PHP 7 mais ne l'est plus. Les littéraux numériques écrits dans le code (par ex. 0x1A) sont déjà de vrais entiers, donc is_numeric() voit un int ordinaire et retourne true.
  • Un suffixe de type unité rend la chaîne entière non numérique. "42px" vaut false. Si vous avez besoin d'extraire un nombre d'une telle chaîne, utilisez le cast (int) ou filter_var() à la place.
  • Les espaces blancs en début/fin sont tolérés (les espaces en fin de chaîne sont autorisés depuis PHP 8.0).

is_numeric() vs. is_int() et is_float()

Ces trois fonctions sont faciles à confondre. La différence réside dans l'importance accordée au type ou uniquement à la valeur :

<?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() s'intéresse à la valeur : « ceci pourrait-il être un nombre ? » Elle accepte les chaînes numériques.
  • is_int() et is_float() s'intéressent au type déclaré : ils ne retournent true que pour un véritable int ou float, jamais pour une chaîne.

Utilisez is_numeric() pour valider des entrées qui arrivent sous forme de texte ; utilisez is_int() / is_float() lorsque vous avez vraiment besoin de connaître le type d'une variable.

Utilisation pratique : valider les entrées avant les calculs

L'utilisation typique de is_numeric() en situation réelle est de protéger les opérations arithmétiques sur des entrées non fiables afin d'éviter les TypeError ou les 0 silencieux :

<?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
?>

Ajouter + 0 (ou caster avec (int) / (float)) convertit la chaîne validée en un vrai nombre une fois que vous savez qu'il est sûr de le faire. Pour une validation plus stricte — par exemple, accepter uniquement des entiers ou appliquer une plage de valeurs — combinez-la avec filter_var() et les filtres FILTER_VALIDATE_INT / FILTER_VALIDATE_FLOAT.

Conclusion

is_numeric() vous indique de manière fiable si une valeur — y compris une chaîne — peut être traitée comme un nombre, ce qui en fait le bon garde-fou avant d'effectuer des calculs sur des données provenant de formulaires, d'URL ou de fichiers. N'oubliez pas qu'elle retourne false pour les chaînes hexadécimales/binaires et pour toute chaîne contenant des caractères non numériques en fin de chaîne, et qu'elle vérifie la valeur, pas le type — utilisez is_int() ou is_float() lorsque le type déclaré est ce qui importe. Voir aussi gettype() et PHP Data Types pour une vue d'ensemble.

Pratique

Pratique
Que fait la fonction is_numeric en PHP ?
Que fait la fonction is_numeric en PHP ?
Was this page helpful?