Intereting Posts
используя отчеты Jasper на веб-сайте PHP Данные сеанса работают на локальном, но не на сервере ipage Как конвертировать между часовыми поясами в PHP с использованием класса DateTime? Изменение цен на корзину в WooCommerce версии 3.0 Как автоматически читать в вычисленных значениях с помощью PHPExcel? PHP Итерация simplexml в цикле foreach Наследование и статические методы и свойства PHP Есть ли файлы для чтения-блокировки Apache перед их обслуживанием? отправлять несколько данных изображения с помощью текстового поля с углового контроллера Проверка / регулярное выражение PHP для URL-адреса openssl_free_key ожидает, что параметр 1 будет ресурсом CodeIgniter + Командная строка + Cron + Cpanel Как я могу использовать библиотеку ACL CodeIgniter? Доктрина 2: Могут ли сущности быть сохранены в сеансах? Facebook PHP SDK -> получение идентификатора пользователя по электронной почте больше не возможно?

Проверка наличия содержимого $ _REQUEST в виде int

Я пытаюсь выполнить базовую операцию: проверить, является ли строка числом.

Это не работает:

$qty = $_REQUEST[qty]; if (is_int($qty) == FALSE) { echo "error"; } else { echo "ok"; } 

Это делает:

 $qty = 1; if (is_int($qty) == FALSE) { echo "error"; } else { echo "ok"; } 

$_REQUEST[qty] отправляется с запросом AJAX ($.post). $_REQUEST[qty] ($.post). $_REQUEST[qty] НЕ пусто и содержит только число (1).

is_numeric() не будет работать, поскольку он обрабатывает 1e4 как число.

Solutions Collecting From Web of "Проверка наличия содержимого $ _REQUEST в виде int"

is_int возвращает только true, если переменная имеет целочисленный тип. если вы пытаетесь проверить, содержит ли переменная строку, представляющую число, используйте:

 is_numeric("1"); 

источник: http://php.net/manual/en/function.is-int.php

РЕДАКТИРОВАТЬ:

используйте ctype_digit () для проверки каждого символа в строке, если это число, чтобы исключить «1e4»,

Если вы хотите проверить наличие цифр только, вы можете использовать ctype_digit .

попробуйте «is_numeric ()» вместо «is_int» …

Я думаю, что ур получает строку из вашего запроса … и is_int действительно проверяет, имеет ли данный объект целое число … Но это не -> это строка.

is_numeric просто проверяет, может ли объект преобразовываться в целое число. Если это так, он возвращает true, иначе false …

 $qty = $_REQUEST[qty]; if (is_numeric($qty) == FALSE) { echo "error"; } else { echo "ok"; } 

PS: используйте $ _POST [] или $ _GET [] вставить $ _REQUEST [];)

Вы говорите, что вы не можете использовать is_numeric потому что он рассматривает 1e4 как число. Ну, 1e4 – число. В частности, 1 * 10^4 .

Вы можете использовать is_int(intval($_REQUEST['qty'])) , но поскольку intval всегда возвращает int (0 при сбое или пустой ввод), вы рискуете ложными срабатываниями. Однако в сочетании с is_numeric или filter_var вы должны быть на довольно солидной основе.

Фактически, все значения $ _REQUEST (а также $ _GET, $ _POST и т. Д.) Всегда являются строками .

Когда $qty $_REQUEST[qty] , это строка, а не целое число. Когда $qty равно 1 , это уже целое число.

Используйте функцию intval чтобы преобразовать ее в целое число. Но, как вы говорите, вы только хотите узнать, является ли это целым числом или нет, поэтому используйте floatval для его преобразования, а затем проверьте, равны ли они:

 if (intval($qty) == floatval($qty)) { echo "Ok!"; } else { echo "error"; } 

Делайте не идентичные сравнения Docs при использовании строкового и целочисленного акта:

 if ($qty !== (string)(int)$qty) { echo "error"; } else { echo "ok"; } 

Это в основном буквально: поскольку все входящие переменные являются строками, вы не можете проверить, что они являются целыми числами, если только вы не передаете их целому числу, а затем вернитесь к строке. Оберните его в функцию, если трудно понять встроенный код, что он делает:

 /** * string is integer value? * * @return bool */ function is_int_string($string) { return $string === (string)(int)$string; } $qty = $_REQUEST[qty]; if (is_int_string($qty) == FALSE) { echo "error"; } else { echo "ok"; } 

HTTP – это текстовый протокол, поэтому в начале есть только строка.

Я решил пойти с preg_match ().

 if (!preg_match("/^[0-9]+$/", $_REQUEST[qty])) {}