Ответы:
Попробуй воспользоваться библиотекой для PHP 5.
Библиотека называется Zend_Form, и входит в состав Zend Framework 1.5 и более новых версий.
//$string - введённое число
$val = intval($string);
if ($val && (round($val) == $val) && ($string[0] != '0') )
{
...
}
перестаньте изобретать велосипед и поддерживать тех, кто это делает Используйте
is_numeric('123.3') даст true
пытается преобразовать строку в число. Если получается - вернет true иначе - false
может жрать числа в двоичной, десятичной, 16 и 8-ми ричной системе счисления, ну и, дробные, конечно.
Совет: используйте встроеные в ядро функции
P.S. и числа "не с нуля" оно тоже "жрет"
if(isset(...) and is_numeric(...)) - проверит пришедшую переменную из форы является ли она числом
is_numeric() не проверяет целое число или нет.
сделайте еще так: $celoe_chislo = (int)$value;
if ($number == (int)$number) даёт 100% результат именно так, как вам надо!
особенно если $number ='abracodabra'
if (is_int(23)) {
echo "is integer\n";
} else {
echo "is not an integer\n";
}
var_dump(is_int(23));
var_dump(is_int("23"));
var_dump(is_int(23.5));
var_dump(is_int(true));
Внимание, правильный ответ: preg_match('/^[1-9]\\d*$/',$var);
Зачем так все сложно? Вот:
... Удалил
Сейчас мой ответ:
preg_match("/^[1-9]\d+$/", $var) - целое не начинающиеся на 0
preg_match("/^-??[1-9]\d+$/", $var) - целое не начинающиеся на 0, и возможно со знаком -
preg_match("/^(\+|-)??[1-9]\d+$/", $var) - целое не начинающиеся на 0, и возможно со знаками + или -
$var - целое число из формы. (Например $_POST['var'])
preg_match("/^[1-9]\d+$/", $var) - целое не начинающиеся на 0
preg_match("/^-??[1-9]\d+$/", $var) - целое не начинающиеся на 0, и возможно со знаком -
preg_match("/^(\+|-)??[1-9]\d+$/", $var) - целое не начинающиеся на 0, и возможно со знаками + или -
Тест preg_match("/^(\+|-)??[1-9]\d+$/", $var):
false (Пустой ввод)
- false (Только знак)
+ false (Только знак)
0 false (Только 0)
-0 false (0 со знаком)
+0 false (0 со знаком)
-0320 false (Число начинается с 0)
-320 true
-00320 false (Число начинается с 0)
-3020 true
-30000000020 true
-320000000000 true
+0364846 false (Число начинается с 0)
320 true
300 true
3203 true
0320 false (Число начинается с 0)
3000320 true
+000320 false (Число начинается с 0)
3200000 true
-320 true
+320 true
32.0 false (Не целое)
32,0 false (Не целое)
3000320fdgdfg false (Лишние символы)
dfgfdg000320 false (Лишние символы)
32000e0 false (Лишние символы)
3sdgdfg20 false (Лишние символы)
После проверки gettype($var) получим string
Для перевода в число можно выполнить сложение с 0
$var = 0 + $var;
После проверки gettype($var) получим integer (или double если $var <= -2147483649 или $var >= 2147483648)
17 лет назад