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 (09). 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 int w zakresie -128..255 było interpretowane jako kod ASCII — np. ctype_digit(48) sprawdzało znak '0' (kod 48) i zwracało true. Od PHP 8.1 takie wywołanie generuje E_DEPRECATED. Zawsze przekazuj ciąg znaków, np. ctype_digit((string) $zmienna).

📘 Naucz się w lekcji →