Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проверка строки на значение типа INT


Автор: Mal Hack 10.6.2005, 23:10
Сабж такой. Есть строка. Надо проверить что в ней находится целочисленное значение.
is_numeric пропускает и float значения, поэтому не подхожит, is_int само собой дает false, т.е. на входе - строка.
Делать (int) перед переменной не катит, т.к. "1.1" преобразовывается в "1".
Пока обхожусь таким вариантом:
Код
preg_match( "#^\d+$#" , $Kernel -> URI[1] )

Автор: Irokez 10.6.2005, 23:25
Код

$num = '1.1';
$bool = (is_int((int)$num) && $num == (int)$num);

не проверял правда..

Автор: Mal Hack 10.6.2005, 23:34
Код

<?php

$num = 'hf11';
if (is_int((int)$num) && $num == (int)$num)
{ print "integer"; }

?>

smile
(int) даст 0, если не сможет преобразовать.

Автор: Irokez 10.6.2005, 23:39
Код

$num = '1';
$int = (int)$num;
echo ($bool = (is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';

Автор: Mal Hack 10.6.2005, 23:49
Условие:
Код
$num == (string)(int)$num

Пример:
Код
<?php

$num = '1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = 'w1.1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = '1e.e1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = 'ee';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
?>

Вывод:
Цитата
int
not int
not int
not int

Автор: Black 10.6.2005, 23:50
Mal Hack
может как-то так замутить:

Код

if($num>=0 or $num<0) { echo "Видимо это число"; }

Автор: Mal Hack 10.6.2005, 23:56
Так, там условие должно быть с тремя =.
Код
$num === (string)(int)$num

PHP-DIRECTOR
попробуй на строке "1.5". Пропустит, а мне этого не надо, как раз.

Автор: Black 10.6.2005, 23:57
Mal Hack
щас посмотрим... я думал тебе надо любые цисла а тебе целые.. щас посмотрю
Добавлено @ 00:06
Вот так вроде работает:

Код

$num = "значение числа";
if($num>=0 or $num<0) 
{
if(is_int($num/1)) { echo "Видимо это число"; }
else { echo "Что-то левое..."; }
}

Автор: Irokez 11.6.2005, 13:45
Mal Hack мое же вроде работает ...

Автор: Mal Hack 11.6.2005, 13:51
Код
<?php
$num = '1';
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = 'w1.1';
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = '1e.e1';
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = '1.1';
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = 'ee';
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
?>

Цитата
not int
not int
not int
not int
not int

Автор: Irokez 11.6.2005, 13:55
ты же строчку забыл
Код

$int = (int)$num;


Код

<?php
$num = '1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)(int)$int)) ? 'int' : 'not int';
print "\n";
$num = 'w1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)(int)$int)) ? 'int' : 'not int';
print "\n";
$num = '1e.e1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)(int)$int)) ? 'int' : 'not int';
print "\n";
$num = '1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)(int)$int)) ? 'int' : 'not int';
print "\n";
$num = 'ee';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)(int)$int)) ? 'int' : 'not int';
print "\n";
?>


Цитата

int
not int
not int
not int
not int

Добавлено @ 13:57
там еще int можно убрать ..
Код

<?php
$num = '1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "\n";
$num = 'w1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "\n";
$num = '1e.e1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "\n";
$num = '1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "\n";
$num = 'ee';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "\n";
?>

Автор: Mal Hack 11.6.2005, 14:05
Irokez.
Ага, теперь работает smile
Ноу меня попроще smile
Код
<?php
$num = '1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = 'w1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = '1e.e1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = '1.1';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
$num = 'ee';
$int = (int)$num;
echo ((is_int((int)$num) && $num == (string)$int)) ? 'int' : 'not int';
print "<br>";
?>


Цитата
int
not int
not int
not int
not int

Автор: Irokez 11.6.2005, 14:20
Цитата(Mal @ 11.6.2005, 14:05)
Ноу меня попроще smile

намного smile

Автор: Black 11.6.2005, 16:48
Mal Hack
а мое что разве не работает???

Автор: Mal Hack 11.6.2005, 17:10
PHP-DIRECTOR
Цитата
int
int
int
not int
int


Код
<?php
$num = '1';
echo (($num>=0 or $num<0) && is_int($num/1)) ? 'int' : 'not int';
print "<br>";
$num = 'w1.1';
echo (($num>=0 or $num<0) && is_int($num/1)) ? 'int' : 'not int';
print "<br>";
$num = '1e.e1';
echo (($num>=0 or $num<0) && is_int($num/1)) ? 'int' : 'not int';
print "<br>";
$num = '1.1';
echo (($num>=0 or $num<0) && is_int($num/1)) ? 'int' : 'not int';
print "<br>";
$num = 'ee';
echo (($num>=0 or $num<0) && is_int($num/1)) ? 'int' : 'not int';
print "<br>";
?>

Автор: Bikutoru 12.6.2005, 11:35
А можно такой глупый вопрос, а каким боком 1.1 относится к типу int?

Автор: Irokez 12.6.2005, 12:55
Цитата(Bikutoru @ 12.6.2005, 11:35)
А можно такой глупый вопрос, а каким боком 1.1 относится к типу int?

можно, никаким

Автор: Opik 12.6.2005, 18:51
А у меня короче:
Код

 $int = '1';
 print ctype_digit($int) ? 'int' : 'not int';

smile

Автор: Mal Hack 12.6.2005, 19:03
Мдя... А я еще ман ночь читаю....

Opik заслуженный плюс... smile))

Автор: Irokez 12.6.2005, 19:53
Цитата(Opik @ 12.6.2005, 18:51)
А у меня короче:

блин.. первый раз увидел эти функции, от меня тоже smile +

Автор: capitan 3.12.2007, 12:51
Вопрос в продолжение топика. А чем принципиально отличается int и intval ? Как мне сказали, int не всегда приведёт строку к 0.

Автор: kasmanaft 3.12.2007, 17:32
smile 
Код

<?php
var_dump(ctype_digit("-5"));
?>
Я бы предложил
Код

if ((string)(int)$num === $num)


Добавлено через 5 минут и 43 секунды
Хм... Вроде такой способ приводили... Чем не устроило?

Автор: kasmanaft 4.12.2007, 07:05
А ччёрт, не заметил, что тема старая smile 


capitan, я принципиальных отличий не замечал..

Автор: Mal Hack 22.12.2007, 00:40
capitan, первое работает с типом, второе со значением, подход к решению задачи - разный, либо с фундамента, либо с крыши.

Автор: BASILIO 28.2.2008, 16:29
Столкнулся с аналогичной проблемой, взял код


Код

<?php
$num = '1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = 'w1.1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = '1e.e1';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
$num = 'ee';
echo ($num == (string)(int)$num) ? 'int' : 'not int';
print "<br>";
?>


потестил его, кажись всё норм, увеличил на одно = тоже идёт кажись, не догнал, чего вы дальше его мусолили... обяснити чтоб на теже грабли не наступил =)

Добавлено через 5 минут и 31 секунду
Цитата(Opik @  12.6.2005,  18:51 Найти цитируемый пост)
А у меня короче:
    
Код

 $int = '1';
 print ctype_digit($int) ? 'int' : 'not int';




ЛЕПОТА, ну почему не в одном поисковике не натыкался на такое раньше? =)

Автор: solenko 28.2.2008, 17:17
Между (int) и intval() есть две большые разницы )
1. (int)  -- операция, а intval -- функция. Соответственно, int быстрее
2. У intval есть второй параметр -- основание
Код

<?php
$i = '1001';
echo (int)$i;
echo "\n\n";
echo intval($i, 2);

Автор: flashaa 28.2.2008, 17:19
У меня вот так:
Код

function isInteger($var) {
    $tmp = intval($var);
    return ($tmp == $var);
}

Автор: lonli 8.3.2008, 02:20
В жизни не додумался бы до (string)(int)$a
Спасибо.

Но между прочем, с "+4" не пройдёт (+ отбрасывается).  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)