Задать вопрос
rishatss
@rishatss
Simple Developer ^)

Как быть с is_numeric() если она пропускает пробелы?

Привет всем :)
Вообщем тут такая история. Решил я проверять GET параметры на числа и тут меня понесло.
Начал копать и понял что если в урле в качестве GET параметра передать строку с пробелами и числом, то is_numeric() кушает это и выплевывает true. А я бы не хотел чтобы такое было. Я конечно решил сейчас так все:
$key_from_get = isset($_GET["key"]) ? $_GET["key"] : "";
$iin_from_get = isset($_GET["iin"]) ? $_GET["iin"] : "";

$key = str_replace(' ', '', $key_from_get);
$iin = str_replace(' ', '', $iin_from_get);

if(is_numeric($key) && is_numeric($iin)){
    TrekInfo($key,$iin); // Отправляем данные в API
}
else{
    echo 'Упс! Что-то не так с параметрами запроса!';
}


Ну я думаю что можно короче и лучше... Есть варианты или такой вариант нормальный? Спасибо большое :)
  • Вопрос задан
  • 314 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 4
Skiphog
@Skiphog
Crutch developer
Если вы ожидаете только числа и при этом они не могут быть нулем, то можете привести параметры к integer.
$key = isset($_GET['key']) ? (int)$_GET['key'] : null;
$iin = isset($_GET['iin']) ? (int)$_GET['iin'] : null;

if(!empty($key) && !empty($iin)) {
    TrekInfo($key, $iin); // Отправляем данные в API
} else {
    echo 'Упс! Что-то не так с параметрами запроса!';
}
Ответ написан
Комментировать
maddog670
@maddog670
$iin_from_get = isset($_GET["iin"]) ? intval($_GET["iin"]) : "";

или используйте trim функцию, но лучше мой пример
Ответ написан
Комментировать
@EvgeniiR
https://github.com/EvgeniiR
bool ctype_digit ( string $text )
Проверяет, являются ли все символы в строке text цифровыми.
php.net/manual/ru/function.ctype-digit.php в помощь
Пробелы не пропускает:
$str = 123;
$str1 = ' 123 ';
$str2 = '123';
print(intval(ctype_digit($str)));
print(intval(ctype_digit($str1)));
print(intval(ctype_digit($str2)));

Выводит 001
Ответ написан
Комментировать
Вот отсюда следует, что
is_numeric - Проверяет, является ли переменная числом или строкой, содержащей число

Я так понял, вы хотите детектить ситуации, когда в строке только числа. Все функции php, которые преобразовывают строку к числу, довольно лояльны к формату строки, и пробелы не влияют на результат. Вы можете либо обрезать строку явно при помощи trim(), либо использовать регулярные выражения.
function is_only_digits_in_variable($variable) {
    return (bool)preg_match('/^[0-9]+$/', $variable);
}
var_dump(is_only_digits_in_variable('    73883   '));  // false
var_dump(is_only_digits_in_variable('73883'));  // true
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы