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): boolRecebe 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
$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 deechoao testar booleans.echoimprimetruecomo"1"efalsecomo uma string vazia, o que pode ser confuso.var_dump()imprimebool(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ãois_numeric()vê um int comum e retornatrue. - 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)oufilter_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()eis_float()se preocupam com o tipo declarado: retornamtruesomente para umintoufloatreal, 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.