[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка на число
AlmazDelDiablo
Мне надо взять из формы данные и, преобразоваав их из строк в числа, проверить, являются ли введенные данные числами ( @_@ ).
Вот обработчик поступивших данных:
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$a = (int)$a;
$b = (int)$b;
$c = (int)$c;
А вот проверка:
if( !is_float( $a ) || !is_float( $b ) || !is_float( $c ) ) {
$error .= 'Вы ввели не числа';
}

Всегда выдает false и пишет, что данные не числа.

Также пробовал вот так:
$a = (int)$_POST['a'];
$b = (int)$_POST['b'];
$c = (int)$_POST['c'];
Но тоже пишет, что не числа.



Спустя 17 минут, 46 секунд (28.11.2010 - 15:54) DySprozin написал(а):
AlmazDelDiablo
это типа такой прикол?))

— вы все - int
— да, как прикажете, мой господин!
— тааак... проверка: вы float?
— нет, мой господин, ты же сам сказал, что мы int!
— тогда вы вообще не числа!

biggrin.gif

может, is_int?

Спустя 3 минуты, 11 секунд (28.11.2010 - 15:57) nugle написал(а):
надо вместо is_float is_int писать, но в чём прикол? Вы превращаете в числа, а потом проверяете, число ли это.

Спустя 2 минуты, 27 секунд (28.11.2010 - 15:59) DySprozin написал(а):
nugle
;;но в чём прикол
прикол в том, что буквы в цифры превратить нельзя (;

Спустя 3 минуты, 43 секунды (28.11.2010 - 16:03) nugle написал(а):
ааа, понятно, ну тогда is_int

Спустя 4 минуты, 3 секунды (28.11.2010 - 16:07) Slays написал(а):
DySprozin
при использовании int на буквенную строку, она тоже преобразуется, только в 0
ТС
Да и зачем ваще проверять является ли число числом, если ты принудительно им говоришь что они стопудова числа

Ну вобщем вверху все правильно сказали, я просто подытожил =)

DySprozin
вверху отжог biggrin.gif

Спустя 15 минут, 53 секунды (28.11.2010 - 16:23) AlmazDelDiablo написал(а):
Да уж. С Флоат и инт я накосячил )
Так, ладно ) Тогда задам вопрос по другому. Мне надо, чтобы если человек ввел не число (с точкой или без нее — не имеет зачения) ему выдало ошибку. Можно ли это сделать без регулярок?)

Спустя 8 минут, 39 секунд (28.11.2010 - 16:32) DySprozin написал(а):
AlmazDelDiablo
а ты сразу, в лоб спрашивай: ctype_digit

$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
if( !ctype_digit( $a ) || !ctype_digit( $b ) || !ctype_digit( $c ) ) {
$error .= 'Вы ввели не числа';
}

Спустя 53 минуты, 27 секунд (28.11.2010 - 17:25) inpost написал(а):
AlmazDelDiablo
А почему без регулярок? Сделай это на регулярке.

Спустя 7 минут, 35 секунд (28.11.2010 - 17:33) DySprozin написал(а):
inpost
а зачем регулярка там, где можно обойтись без регулярки? laugh.gif

Спустя 3 минуты, 27 секунд (28.11.2010 - 17:36) vinnie написал(а):

if (preg_match ("#^[^0-9\.]+$#i", $a) or preg_match ("#^[^0-9\.]+$#i", $b) or preg_match ("#^[^0-9\.]+$#i", $c))
echo "Это не число";

Спустя 13 секунд (28.11.2010 - 17:36) inpost написал(а):
DySprozin
Ну это уже ранее было: if_float, просто пусть чему-нибудь новому человек научится =)

Спустя 4 минуты, 37 секунд (28.11.2010 - 17:41) ИНСИ написал(а):

Спустя 41 секунда (28.11.2010 - 17:42) vinnie написал(а):
мы ему все варианты показываем

Спустя 10 минут, 26 секунд (28.11.2010 - 17:52) DySprozin написал(а):
ну тогда вот:
$tpl="#[^0-9\.]+#";
if(preg_match($tpl,$a) || preg_match($tpl,$b) || preg_match($tpl,$c)) echo "это не число";

а то в примере выше за каким-то дьяволом модификатор "i" и ^$ появились B)

а в учетом того, что у нас int:

$tpl="#[^0-9]+#";
if(preg_match($tpl,$a) || preg_match($tpl,$b) || preg_match($tpl,$c)) echo "это не число";

Спустя 2 минуты, 35 секунд (28.11.2010 - 17:55) vinnie написал(а):
DySprozin
чем тебе моя регулярка не понравилась?

Спустя 1 минута, 29 секунд (28.11.2010 - 17:56) vinnie написал(а):
хотя ты прав))) много лишнего написал

Спустя 3 минуты, 26 секунд (28.11.2010 - 18:00) vinnie написал(а):
цифры в верхнем регистре))))) хохма

Спустя 3 минуты, 20 секунд (28.11.2010 - 18:03) DySprozin написал(а):
а теперь к вопросу "почему не регулярка":

if(!ctype_digit($a) || !ctype_digit($b) || !ctype_digit($c)) echo "это не число";

этот вариант _гораздо_ понятней и короче (;

Спустя 3 минуты, 21 секунда (28.11.2010 - 18:06) DySprozin написал(а):
а вот еще короче:

if(!ctype_digit($a.$b.$c)) echo "это не число";


все, ухожу-ухожу-ухожу :D

Спустя 1 минута, 34 секунды (28.11.2010 - 18:08) vinnie написал(а):

if(!ctype_digit($a) || !ctype_digit($b) || !ctype_digit($c)) echo "это не число";


если встретится число с плавающей точкой, он скажет, что это не число

Спустя 1 минута, 18 секунд (28.11.2010 - 18:09) DySprozin написал(а):
vinnie
так изначально у нас условие: int wink.gif

Спустя 59 секунд (28.11.2010 - 18:10) vinnie написал(а):
а кто-то написал, что можно и с точкой) автор вроде

Спустя 1 минута, 26 секунд (28.11.2010 - 18:12) inpost написал(а):
а чем is_float вам не нравится???

Спустя 3 минуты, 54 секунды (28.11.2010 - 18:16) ИНСИ написал(а):
копец, столько вариантов все дают, решил дать автору:
while(list($value) = each($_POST)) {
if(ctype_digit($value) !== true) echo "ctype_digit: Строка $value не состоит только из цифр.\n";
if(is_numeric($value) !== true) echo "is_numeric: Строка $value не состоит только из цифр.\n";
if(is_int($value) !== true) echo "is_int: Строка $value не состоит только из цифр.\n";
if(is_integer($value) !== true) echo "is_integer: Строка $value не состоит только из цифр.\n";
if(is_string($value) === true) echo "is_string: Строка $value не состоит только из цифр.\n";
}

Спустя 3 минуты, 5 секунд (28.11.2010 - 18:19) DySprozin написал(а):
;;а кто-то написал, что можно и с точкой) автор вроде

ну тогда у кого-то раздвоение личности или двойка по типам :P

если есть точки, то вот короткий вариант:

if(preg_match("#[^0-9\.]+#","$a$b$c")) echo "это не число";


;;а чем is_float вам не нравится???
потому что передаются переменные как string ;)

Спустя 2 минуты (28.11.2010 - 18:21) DySprozin написал(а):
welbox2
это что?))) ты сначала говоришь, что value - это int, а потом проверяешь это laugh.gif

Спустя 2 минуты, 24 секунды (28.11.2010 - 18:23) ИНСИ написал(а):
DySprozin опа, не заметил smile.gif

Спустя 30 секунд (28.11.2010 - 18:24) inpost написал(а):
Преобразовать его в float?
http://php.net/manual/en/function.floatval.php

Спустя 2 минуты, 14 секунд (28.11.2010 - 18:26) inpost написал(а):
$a = 0.0+$a; // Теперь значение будет int/float
http://php.su/learnphp/datatypes/?mn

Спустя 14 минут, 28 секунд (28.11.2010 - 18:40) DySprozin написал(а):
;;Преобразовать его в float?
угу, а потом проверить функцией is_float() laugh.gif

Спустя 11 минут, 7 секунд (28.11.2010 - 18:51) inpost написал(а):
DySprozin
А нет смысле потом проверять. Достаточно убедиться, что оно не пустое, это число.

Спустя 3 минуты, 14 секунд (28.11.2010 - 18:55) DySprozin написал(а):
inpost
а если это нуль? ведь юзер имеет право ввести нуль - тоже ведь число (;

Спустя 2 часа, 18 минут, 45 секунд (28.11.2010 - 21:13) AlmazDelDiablo написал(а):
Спасибо всем smile.gif Через регулярку заработало ) И спасибо за разбор, что же для чего.
Сори за путаницу — мне надо было число с возможно плавающей точкой

ПС: Я делал калькулятор квадратных уравнений ^^

Спустя 12 часов, 28 минут, 47 секунд (29.11.2010 - 09:42) linker написал(а):
Регулярки в топку, не нужны они здесь вообще
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];

if(!is_numeric($a) || !is_numeric($b) || !is_numeric($c))
{
$error .= 'Вы ввели не числа';
}

Спустя 8 часов, 15 минут, 26 секунд (29.11.2010 - 17:58) AlmazDelDiablo написал(а):
Подниму темку. Слушайте, сделал калькулятор степеней, но если ответ очень большой (например, 35 в степени 234), то ответ выдает INF. Можно ли расширить число, максимальное для вывода?)

Спустя 4 часа, 27 минут, 43 секунды (29.11.2010 - 22:25) DySprozin написал(а):

Спустя 11 часов, 43 минуты, 28 секунд (30.11.2010 - 10:09) linker написал(а):
DySprozin
Ну ты оригинал.

Есть замечательная библиотека BCMATH
echo bcpow(35, 234, 0);

Спустя 9 часов, 31 минута, 21 секунда (30.11.2010 - 19:40) DySprozin написал(а):
какая прелесть! biggrin.gif респект, не знал cool.gif


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.