Проверка, является ли строковая переменная числом

Published: 21.04.2011

PHP является слаботипизированным языком, что позволяет производить арифметические действия над переменными не задумываясь, перед нами число или строка из цифр. Интерпретатор при необходимости сам приведёт переменные к нужному типу, причём результат будет числом. Например:

$a = "1"; // строка
$b = "2"; // строка
$c = 5;   // число
echo $a + $b;   // 3
echo $a + $c;   // 6

Довольно удобно, правда? Не зря PHP считается лёгким в обучении. Но, бывают случаи, когда такая "заботливость" языка кажется чрезмерной. Продолжим предыдущий пример и попробуем вычислить результат между числом и "не числом":

$x = "string1";
$y = "22stri2ng";
$z = "s3t3rin3g";
echo $x - $a;   //  -1, строка $x была посчитана за ноль
echo $y / $b;   //  11, вот здесь внимание: если первый символ в строке — цифра, то в качестве числа берутся все цифры до первого нецифрового символа
echo $c * $z;   //  0, строка $z была посчитана за ноль

Получается, что, даже если строка будет содержать явный бред с точки зрения математики, результатом арифметического действия будет число. Кроме попытки разделить что-либо на строку, т.е., фактически, на ноль — в этом случае будет критическая ошибка PHP.

Поэтому, прежде чем производить арифметические действия с данными, в которых вы не уверены, лучше всего предварительно проверять, являются ли они числом:

if (is_numeric($a)) echo "Это число.";
else echo "Это не число.";