W3docs

is_numeric()

A função is_numeric() do PHP verifica se uma variável é numérica ou uma string numérica, retornando um boolean.

Introdução

is_numeric() é uma função PHP nativa que testa se um valor é um número ou uma string numérica. Essa última parte é o motivo principal da sua existência: o PHP frequentemente recebe números como strings — de campos de formulário, parâmetros de URL, JSON, arquivos CSV — e você precisa de uma forma confiável de perguntar "isso poderia ser tratado como número?" antes de fazer operações aritméticas. is_numeric() responde exatamente a essa pergunta e retorna um boolean.

Esta página aborda a sintaxe, o que é considerado numérico (e o que surpreendentemente não é), como ela difere de is_int() e is_float(), e um padrão prático de validação de entrada.

Sintaxe

is_numeric(mixed $value): bool

Recebe um único argumento, $value, e retorna true se $value for um número ou uma string numérica, e false caso contrário. Nunca lança exceções e nunca modifica seu argumento.

Exemplo básico

php— editable, runs on the server

$var1 é a string "42", $var2 é o float 3.14 e $var3 é a string "hello". Os dois primeiros são numéricos, então is_numeric() retorna true; o terceiro não é.

Dica: Use var_dump() em vez de echo ao testar booleans. echo imprime true como "1" e false como uma string vazia, o que pode ser confuso. var_dump() imprime bool(true) / bool(false) para que o resultado seja inequívoco.

O que é considerado numérico

Uma string é numérica quando representa um inteiro ou float válido em notação decimal ou científica. Isso inclui sinal de prefixo, ponto decimal no início ou no final, espaços em branco ao redor e expoentes:

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

Os erros mais comuns:

  • Strings hexadecimais e binárias retornam false. "0x1A" era numérico antes do PHP 7, mas não é mais. Literais numéricos escritos no código (ex.: 0x1A) já são inteiros reais, então is_numeric() vê um int comum e retorna true.
  • Um sufixo de unidade torna a string inteira não numérica. "42px" é false. Se precisar extrair um número de tal string, use casting com (int) ou filter_var().
  • Espaços em branco no início/final são tolerados (espaços no final passaram a ser permitidos no PHP 8.0).

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

Essas três funções são fáceis de confundir. A diferença está em se o tipo importa ou apenas o valor:

<?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() se preocupa com o valor: "isso poderia ser um número?" Aceita strings numéricas.
  • is_int() e is_float() se preocupam com o tipo declarado: retornam true somente para um int ou float real, nunca para uma string.

Use is_numeric() ao validar entradas que chegam como texto; use is_int() / is_float() quando você genuinamente precisar conhecer o tipo de uma variável.

Uso prático: validando entrada antes de operações matemáticas

O uso mais comum de is_numeric() no mundo real é proteger operações aritméticas em entradas não confiáveis para evitar TypeErrors ou 0s silenciosos:

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

Adicionar + 0 (ou fazer casting com (int) / (float)) converte a string validada em um número real, uma vez que você sabe que é seguro fazê-lo. Para validação mais rigorosa — por exemplo, aceitar apenas inteiros ou aplicar um intervalo — combine com filter_var() e os filtros FILTER_VALIDATE_INT / FILTER_VALIDATE_FLOAT.

Conclusão

is_numeric() informa de forma confiável se um valor — incluindo uma string — pode ser tratado como número, tornando-a a verificação correta antes de realizar operações aritméticas com dados provenientes de formulários, URLs ou arquivos. Lembre-se de que retorna false para strings hexadecimais/binárias e para qualquer string com caracteres não numéricos no final, e que verifica o valor, não o tipo — use is_int() ou is_float() quando o tipo declarado for o que importa. Veja também gettype() e PHP Data Types para uma visão mais ampla.

Prática

Prática
O que a função is_numeric faz no PHP?
O que a função is_numeric faz no PHP?
Was this page helpful?