W3docs

is_numeric()

La funzione is_numeric() in PHP verifica se una variabile è numerica o meno, accettando sia numeri che stringhe numeriche.

Introduzione

is_numeric() è una funzione integrata di PHP che verifica se un valore è un numero o una stringa numerica. Quest'ultima parte è il motivo principale per cui esiste: PHP riceve spesso i numeri come stringhe — da campi form, parametri di query, JSON, file CSV — e occorre un modo affidabile per chiedersi "questo potrebbe essere trattato come un numero?" prima di eseguire operazioni aritmetiche. is_numeric() risponde esattamente a questa domanda e restituisce un boolean.

Questa pagina descrive la sintassi, cosa viene considerato numerico (e cosa sorprendentemente non lo è), le differenze rispetto a is_int() e is_float(), e un pattern pratico di validazione dell'input.

Sintassi

is_numeric(mixed $value): bool

Accetta un singolo argomento, $value, e restituisce true se $value è un numero o una stringa numerica, e false altrimenti. Non genera mai eccezioni e non modifica il suo argomento.

Esempio di base

php— editable, runs on the server

$var1 è la stringa "42", $var2 è il float 3.14 e $var3 è la stringa "hello". I primi due sono numerici, quindi is_numeric() restituisce true; il terzo non lo è.

Suggerimento: usa var_dump() anziché echo quando testi i boolean. echo stampa true come "1" e false come stringa vuota, il che è facile da fraintendere. var_dump() stampa bool(true) / bool(false), rendendo il risultato inequivocabile.

Cosa viene considerato numerico

Una stringa è numerica quando rappresenta un intero o un float valido in notazione decimale o scientifica. Ciò include un segno iniziale, un punto decimale iniziale o finale, spazi bianchi circostanti ed esponenti:

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

Gli errori comuni:

  • Le stringhe esadecimali e binarie restituiscono false. "0x1A" era considerato numerico prima di PHP 7, ma non lo è più. I letterali numerici scritti nel codice (es. 0x1A) sono già interi reali, quindi is_numeric() vede un semplice int e restituisce true.
  • Un'unità in coda rende l'intera stringa non numerica. "42px" è false. Se occorre estrarre un numero da una stringa simile, usa il cast (int) oppure filter_var().
  • Gli spazi bianchi iniziali/finali sono tollerati (gli spazi finali sono stati accettati a partire da PHP 8.0).

is_numeric() vs. is_int() e is_float()

Queste tre funzioni sono facili da confondere. La differenza sta nel fatto che interessa il tipo o solo il valore:

<?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() si interessa al valore: "questo potrebbe essere un numero?" Accetta le stringhe numeriche.
  • is_int() e is_float() si interessano al tipo dichiarato: restituiscono true solo per un int o un float reale, mai per una stringa.

Usa is_numeric() quando validi input che arriva come testo; usa is_int() / is_float() quando hai effettivamente bisogno di conoscere il tipo di una variabile.

Uso pratico: validare l'input prima di operazioni aritmetiche

Il tipico caso d'uso reale di is_numeric() è proteggere le operazioni aritmetiche su input non attendibile, per evitare TypeError o silenziosi 0:

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

Aggiungere + 0 (o eseguire il cast con (int) / (float)) converte la stringa validata in un numero reale, una volta che sai che è sicuro farlo. Per una validazione più rigorosa — ad esempio, accettare solo interi o applicare un intervallo — combinala con filter_var() e i filtri FILTER_VALIDATE_INT / FILTER_VALIDATE_FLOAT.

Conclusione

is_numeric() indica in modo affidabile se un valore — inclusa una stringa — può essere trattato come un numero, rendendola il controllo corretto da eseguire prima di operazioni aritmetiche su dati provenienti da form, URL o file. Ricorda che restituisce false per le stringhe esadecimali/binarie e per qualsiasi stringa con caratteri non numerici in coda, e che controlla il valore, non il tipo — usa is_int() o is_float() quando conta il tipo dichiarato. Vedi anche gettype() e PHP Data Types per il quadro completo.

Esercizio

Pratica
Cosa fa la funzione is_numeric in PHP?
Cosa fa la funzione is_numeric in PHP?
Was this page helpful?