Is numeric PHP: Comment vérifier si une valeur est numérique en PHP ?

Qu’est-ce que is numeric en PHP ?

C’est une fonction native de PHP qui permet de déterminer si une valeur est numérique ou une chaîne numérique. Elle est disponible depuis PHP 4 et reste inchangée dans PHP 8.

La fonction évalue à la fois les types int et float, ainsi que les chaînes de caractères contenant une valeur numérique valide. Ce comportement la distingue de is_int() et is_float(), qui ne vérifient qu’un type strict.

Elle est particulièrement utile pour valider des données issues de formulaires, d’une API ou d’une base de données avant tout traitement arithmétique. Les données externes arrivent souvent sous forme de chaîne, même lorsqu’elles représentent un nombre.

Utiliser is_numeric() permet d’éviter des erreurs de calcul ou des comportements inattendus causés par des valeurs non numériques dans vos opérations mathématiques.


Syntaxe et comportement de is_numeric()

is_numeric() accepte un seul argument obligatoire de type mixed, ce qui lui permet de recevoir n’importe quelle valeur PHP : entier, flottant, chaîne, tableau ou valeur nulle.

is_numeric(mixed $value): bool

La fonction ne réalise aucune conversion implicite sur la valeur transmise, ce qui garantit une évaluation fidèle de la donnée reçue. Elle retourne true si la valeur est numérique ou une chaîne numérique valide, et false dans tous les autres cas.

Passer une variable non initialisée ne provoque pas d’erreur fatale, mais génère un avertissement PHP. Il est donc conseillé de vérifier qu’une variable est bien définie, par exemple avec isset(), avant tout appel à is_numeric().

Pour contrôler plusieurs valeurs, vous devez appeler la fonction séparément pour chacune d’elles, car elle n’accepte pas plusieurs arguments simultanément.


Valeurs qui retournent true

is_numeric() retourne true pour les entiers, les flottants, et les chaînes dont le contenu est interprétable comme un nombre valide. Voici les cas concrets qui produisent un résultat positif.

<?php
var_dump(is_numeric(42));        // bool(true)
var_dump(is_numeric(3.14));      // bool(true)
var_dump(is_numeric("42"));      // bool(true)
var_dump(is_numeric("3.14"));    // bool(true)
var_dump(is_numeric("1e5"));     // bool(true) — notation scientifique
var_dump(is_numeric("-7"));      // bool(true) — entier négatif
var_dump(is_numeric("+7"));      // bool(true) — entier positif explicite
var_dump(is_numeric("0x1A"));    // bool(false) depuis PHP 7
?>

La notation scientifique comme "1e5" est reconnue comme numérique, ce qui peut surprendre si vous attendez uniquement des entiers simples. Notez que les chaînes hexadécimales comme "0x1A" retournent false depuis PHP 7, contrairement au comportement de PHP 5.


Valeurs qui retournent false

is_numeric() retourne false dès qu’un caractère non numérique est présent dans la chaîne, même si le reste est un nombre. Ce comportement strict protège vos validations contre des données malformées.

<?php
var_dump(is_numeric("42px"));     // bool(false) — unité CSS
var_dump(is_numeric("3,14"));     // bool(false) — virgule au lieu du point
var_dump(is_numeric(""));         // bool(false) — chaîne vide
var_dump(is_numeric(null));       // bool(false)
var_dump(is_numeric([]));         // bool(false) — tableau
var_dump(is_numeric("12 34"));    // bool(false) — espace entre les chiffres
?>

La virgule décimale française "3,14" est refusée car PHP utilise le point comme séparateur décimal. Si vos données proviennent d’un formulaire francophone, convertissez d’abord la virgule en point avec str_replace() avant d’appeler is_numeric().


Cas pratique : valider une donnée de formulaire

Avant d’effectuer un calcul, il est indispensable de vérifier que la valeur reçue est bien numérique pour éviter des erreurs ou des résultats incorrects. Ce cas est typique lors du traitement d’un champ de quantité ou de prix dans un formulaire HTML.

<?php
$quantite = $_POST['quantite'] ?? '';

if (is_numeric($quantite)) {
    $total = (float)$quantite * 9.99;
    echo "Total : " . $total . " €";
} else {
    echo "Erreur : la quantité doit être un nombre valide.";
}
?>

Ce code récupère la valeur du formulaire et la teste avec is_numeric() avant tout calcul. Si la valeur est valide, elle est convertie en float pour garantir un résultat arithmétique correct. Si elle est invalide, un message d’erreur clair est retourné à l’utilisateur.


is_numeric() vs is_int() vs ctype_digit()

Ces trois fonctions vérifient toutes une valeur numérique, mais avec des niveaux de rigueur très différents. Choisir la mauvaise fonction peut entraîner une validation trop permissive ou trop restrictive selon votre contexte.

FonctionAccepte les floatsAccepte les chaînesAccepte les négatifs
is_numeric()
is_int()
ctype_digit()

ctype_digit() est la plus restrictive : elle n’accepte que les chaînes composées exclusivement de chiffres non signés, sans point décimal ni signe. Utilisez is_numeric() pour une validation large, is_int() pour un type strict, et ctype_digit() pour des identifiants ou codes purement numériques.

Sources: PHPnet, chaines de caractères numériques

Cours

Variables et types

Manipulation de chaînes

Tableaux

Fichiers et système

Sécurité, session et cookie