Как проверить корректность вводимого в форму числа на PHP?

интернет программирование php perl

Нужно что бы проверку проходило только целое число, начинающееся не с нуля (# не такое: 0123)
Ответы:
Попробуй воспользоваться библиотекой для 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() не проверяет целое число или нет.
решил вот так:
[^0][^\D]\d+
сделайте еще так: $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) - целое не начинающиеся на 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 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.