Php перевірити чи ціле число. Перевірка числових параметрів у PHP. Перевірка, чи є змінна цілим числом на PHP

02.04.2020 Поради

Від автора:Вітаю вас, друзі. У цій статті ми вже почнемо вивчати можливості регулярних виразів, познайомимося з функцією preg_match() в PHP, а також складемо перше регулярний виразперевірки на число.

Почати статтю, мабуть, варто з того, що регулярні вирази — дуже потужний засіб для роботи з текстом. Як ви вже знаєте, за допомогою регулярних виразів ми можемо знайти в масиві тексту практично будь-що. Однак зловживати такою міццю не варто. Не забувайте про те, що PHP пропонує нам безліч функцій для роботи з рядками, типами і так далі, які дозволяють перевірити, скажімо, наявність певного символу або підрядка в рядку.

Тому, якщо є можливість вирішити завдання без залучення регулярних виразів, тоді варто використовувати цю можливість, оскільки функції для роботи з регулярними виразами, як правило, є більш ресурсомісткими. У разі завдання можна розв'язати й без регулярних выражений. Наприклад, перевірити чи всі символи в рядку числовими можна за допомогою функції ctype_digit().

Але за умовами поставленої у статті завдання нам необхідно використовувати регулярні вирази, тому вирішимо поставлене завдання, використовуючи функцію preg_match(). Ця функціяперевіряє рядок на відповідність шаблону регулярного виразу. Функція має 5 параметрів, у тому числі практично практично використовуються лише перші 2.

Перший параметр функції буде шаблоном регулярного виразу. Другий - рядок, що перевіряється. Іноді може знадобитися третій параметр, вказавши який ми матимемо масив із результатами пошуку.

Давайте складемо свій перший шаблон. Виглядати він може так:

$ pattern = "#^+$#";

$ pattern = "#^+$#";

На перший погляд може виглядати незрозуміло й дещо страшно. Однак нічого страшного тут немає, зараз ми його розберемо. Почнемо з того, що регулярні висловлювання активно використовують спеціальні символи, Т.зв. метасимволи. У нашому шаблоні їх досить багато:

^ - метасимвол початку рядка

$ - метасимвол кінця рядка

- метасимволи символьного класу

+ — Квантифікатор, який позначає 1 або більше символів або груп символів, після яких використаний квантифікатор.

Отже, що ми отримали? Як можна прочитати складений шаблон регулярного виразу? А читається він так:

рядок буде валідуватися повністю, від початку до кінця (метасимволи ^$)

у рядку можуть бути лише цифри від 0 до 9 ()

у рядку має бути як мінімум одна цифра (+)

Тепер давайте перевіримо шаблон у дії.

Як бачимо, регулярний вираз працює коректно. Під нього підійшли лише рядки, що повністю складаються з цифр. До речі, якщо ви тестуєте на сайті regexr.com і в тексті більше одного рядка, тоді для шаблону необхідно вказати спеціальний прапор — m, що дозволить шаблону працювати з багаторядковим текстом. Зробити це можна у верхньому правому кутку, пункт меню flags.

Зверніть увагу, що станеться, якщо ми приберемо метасимволи початку та/або кінця рядка:

Тепер ми вадидуємо не весь рядок повністю, а просто шукаємо щось у рядку. У результаті в третьому рядку було знайдено цифри, хоча за умовою завдання цей рядок нам не підходить. Тепер давайте використовуємо функцію preg_match і перевіримо кожен із рядків окремо:

$arr = ["123", "test", "45ew45", "456"]; $ pattern = "#^+$#"; foreach($arr as $item)( if(preg_match($pattern, $item))( echo "

Рядок $itemмістить лише цифри

"; )else( echo "

Рядок $itemне підходить

"; } }

$ arr = ["123", "test", "45ew45", "456"];

$ pattern = "#^+$#";

foreach ($ arr as $ item ) (

Наприклад візьмемо таку адресу: http://example.com/price.php?product=859844&page=99.

Скрипт виводить список цін у магазинах для товару product, необов'язковий параметр указує номер сторінки. Якщо page не вказано, і url виглядає як http://example.com/price.php?product=859844, Тоді виводимо першу сторінку.

До версії PHP 5.2.0 Завдання можна було вирішити таким нехитрим чином.

// Функція отримання параметра, що є натуральним числом // $arr = масив параметрів ($GET або $POST), $name = ім'я параметра // Функція повертає значення параметра, або $default якщо параметр відсутня, або некоректний function get_param_nat($ arr, $name, $default=null) ( if (!isset($arr[$name])) return $default; // Перевіряємо дуже нехитрим способом, конвертуємо параметр у число, потім назад у рядок // Якщо все нормально, то отриманий рядок повинен збігатися з вихідним значенням параметра $ val = $ arr [$ name];$ intval = intval ($ val); = $val ||$intval< 1) return $default; return $intval; } // Проверяем параметр product if (($product = get_param_nat($_GET, "product")) === null) die("Product not found"); // Получаем номер страницы $page = get_param_nat($_GET, "page", 1);

Починаючи з версії 5.2.0 у PHP з'явилася група функцій Filter: filter_var, filter_input, filter_var_array та кілька інших. Функції можуть перевіряти змінні на цілі числа, числа з плаваючою точкою, e-mail, ip-адреси, url і т.д., а також очищати рядки відповідно до заданих параметрів.

Перепишемо код за допомогою функції filter_input.

Function get_param_nat($type, $name, $default=null) ( $val = filter_input($type, FILTER_VALIDATE_INT, array("min_range" => 1, "max_range" => PHP_INT_MAX)); // filter_input повертає false, якщо фільтрація закінчилася невдачею, або null, якщо змінна невизначена if ($val === null || $val === false) return $default; return $val; ) // Перевіряємо параметр product if (($product = get_param_nat(INPUT_GET) , "product")) === null) die("Product not found"); // Отримуємо номер сторінки $page = get_param_nat(INPUT_GET, "page", 1);

Невелике тестування показало, що за швидкістю роботи два варіанти функції get_param_nat практично однакові, а у разі відсутності параметра, наприклад, не буде вказано page, перший варіант відпрацьовуватиме навіть дещо швидше.

Тому вирішувати, що використовувати. Я особисто використовую першу функцію, мені вона якось ближче і зрозуміліша.

Та й невеликий ліричний відступ наприкінці. Щоб уникнути дублювання сторінки для пошукових систем, наприклад без page і з page=1, рекомендую в розділі head сторінки вказувати канонічний url. Виглядатиме це приблизно так:

... "> ...

Зараз на сайті ведуться активні роботи із запуску нового розділу. І під час написання деяких скриптів йому виникла необхідність перевірки змінних на число. І не просто число (адже 1.5 – це теж число), але в ціле число. І ось як я зробив перевірку.

Перевірка, чи є змінна цілим числом на PHP

Для перевірки на PHP, чи є число цілим, ми скористаємося регулярним виразом:

Відповідно, якщо змінна – ціле число, виконуємо необхідну нам дію і навпаки.

Перевірка, чи є змінна цілим числом на JavaScript

У JavaScript справи трохи по-іншому, і тут нам потрібно написати свою невелику функцію:

Function number_scan(num) ( return (num ^ 0) === num; )

і вже її використовувати для перевірки:

Тут також при змінній, що дорівнює цілій кількості, виконується необхідна вам дія і навпаки.