2012-02-23 3 views
1

У меня есть форма, где пользователи ищут ключевые слова.Как проверить, является ли строковое значение, возвращаемое с текстового ввода, целым числом

Я хочу проверить, не отправляют ли пользователи число (целое число) вместо ключевого слова.

Я использую это:

$keyword = $_REQUEST["keyword"]; 

if (is_int($keyword)) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

, но он всегда возвращает ложь, даже если значение отправленного целое.

+2

Это потому, что '$ _POST' всегда содержит строки, а не целые значения. –

+2

Я обычно использую ['ctype_digit()'] (http://us3.php.net/manual/en/function.ctype-digit.php), но люди делают это много разных способов. –

+0

Возможный дубликат [php validate integer] (http://stackoverflow.com/questions/4100022/php-validate-integer) –

ответ

8

is_int проверяет, является ли переменная целочисленного типа . У вас есть строка, символы которой представляют собой целое число.

Try:

if (is_numeric($keyword) && is_int(0+$keyword)) 

0+ неявно преобразовать следующее тип номера, так что вы будете в конечном итоге с числовым значением строки, если это возможно. Вызов is_numeric сначала гарантирует, что вы не конвертируете мусор.

+0

Thanx @Borealid. Ницца. –

+0

есть много способов сделать это, но лично я предпочитаю * явные * конверсии над * неявными *, потому что они гораздо более выразительны. также проверять максимальный целочисленный размер - хорошая идея. – Kaii

4

is_int() для типа безопасного сравнения, поэтому строка , которая получена из браузера, всегда оценивается в false.

Если вам действительно нужно проверить, если переменная является integer вы можете использовать эту удобную функцию:

function str_is_int($number) { 
    // compare explicit conversion to original and check for maximum INT size 
    return ((int)$number == $number && $number <= PHP_INT_MAX); 
    // will return false for "123,4" or "123.20" 
    // will return true for "123", "-123", "-123,0" or "123.0" 
} 

Примечание: вы должны заменить PHP_INT_MAX с максимальным размером целочисленного вашей целевой системы - например, вашей базы данных.


in the docs of is_int() вы можете прочитать:

is_int - Найти тип переменной, является ли целое число

bool is_int (mixed $var) 

Примечание:

Чтобы проверить, является ли переменная представляет собой числовую или числовую строку (например, ввод формы, которая всегда является строка), вы должны использовать is_numeric().

Пример:

<?php 
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)); 
?> 

Приведенный выше пример выведет:

is integer 
bool(true) 
bool(false) 
bool(false) 
bool(false) 
+0

is_numeric() работает, но мне нужно знать также, если число целое. –

-1

Я думаю, ctype_digit() будет работать в вашем случае.

+0

Пожалуйста, сообщите некоторые данные. Или поместите его в комментарии. –

Смежные вопросы