ctype_digit
funkcja
Sprawdza, czy wszystkie znaki w ciągu znaków to cyfry (0–9). Szybsza alternatywa dla wyrażeń regularnych przy walidacji liczb całkowitych.
ctype_digit(mixed $text): bool
ctype_digit zwraca true, gdy każdy znak podanego ciągu to cyfra (0–9). Pusty ciąg zwraca false. Funkcja jest znacznie szybsza od preg_match('/^\d+$/', ...) i wystarczająca do walidacji np. kodu pocztowego (po usunięciu myślnika), ID z formularza czy numeru strony.
<?php
declare(strict_types=1);
$id = $_GET['id'] ?? '';
if (!ctype_digit($id) || $id === '') {
http_response_code(400);
echo 'Nieprawidłowy identyfikator.';
exit;
}
// Bezpiecznie: $id zawiera wyłącznie cyfry
$rekord = $pdo->prepare('SELECT * FROM produkty WHERE id = ?');
$rekord->execute([(int) $id]);
Pułapka z liczbami całkowitymi. Przed PHP 8.1 przekazanie
intw zakresie -128..255 było interpretowane jako kod ASCII — np.ctype_digit(48)sprawdzało znak'0'(kod 48) i zwracałotrue. Od PHP 8.1 takie wywołanie generujeE_DEPRECATED. Zawsze przekazuj ciąg znaków, np.ctype_digit((string) $zmienna).