Start · Sprachen · PHP · Referenz · ctype_xdigit

ctype_xdigit

Funktion

Prüft, ob alle Zeichen des übergebenen Strings gültige Hexadezimalziffern sind (<code>0–9</code>, <code>a–f</code>, <code>A–F</code>).

seit PHP 4.0.4 Kategorie: string

Signatur

ctype_xdigit(string $text): bool

Beschreibung

ctype_xdigit() gibt true zurück, wenn jedes Zeichen des übergebenen Strings eine gültige Hexadezimalziffer ist – also zu den Ziffern 09 oder den Buchstaben af bzw. AF gehört. Enthält der String andere Zeichen (z. B. Leerzeichen, gz, Sonderzeichen oder ein führendes 0x), liefert die Funktion false.

Die Funktion ist besonders nützlich zur Validierung von Eingaben, die Hex-Werte repräsentieren sollen – etwa Farb-Codes aus HTML-Formularen (z. B. FF8800), Prüfsummen (MD5-, SHA-Hashes), UUID-Segmente oder rohe Hex-Nutzdaten aus einer API. Da ctype_xdigit() rein zeichenbasiert arbeitet, ist sie deutlich schneller als ein äquivalenter regulärer Ausdruck.

Zu beachten: Ein leerer String '' liefert ab PHP 8.1 false; in älteren Versionen verhielt sich die Funktion bei leerem String anders (lieferte true). Übergabe eines nicht-string-Arguments führt in PHP 8.x direkt zu false (in PHP 7.x und früher wurden Integer als ASCII-Zeichencodes interpretiert).

Parameter

Name Typ Default Beschreibung
$text Pflicht string Der zu prüfende String. Jedes Zeichen wird einzeln daraufhin geprüft, ob es eine gültige Hexadezimalziffer (0–9, a–f, A–F) ist.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn alle Zeichen des Strings gültige Hexadezimalziffern sind. Gibt false zurück, wenn der String mindestens ein ungültiges Zeichen enthält, leer ist (ab PHP 8.1) oder kein String übergeben wurde.

Beispiele

Einfache Hexadezimalwerte prüfen

<?php
var_dump(ctype_xdigit('FF8800'));  // gültiger Hex-Farbcode
var_dump(ctype_xdigit('abc123'));  // gültig: nur 0-9, a-f
var_dump(ctype_xdigit('0x1A'));    // ungültig: 'x' ist kein Hex-Zeichen
var_dump(ctype_xdigit('GHIJKL')); // ungültig: G-Z nicht erlaubt
var_dump(ctype_xdigit(''));        // false (ab PHP 8.1)
bool(true) bool(true) bool(false) bool(false) bool(false)

HTML-Farbcode aus Formular validieren

<?php
function validateHexColor(string $color): bool {
    // Führendes '#' entfernen, falls vorhanden
    $hex = ltrim($color, '#');

    // Länge muss 3 oder 6 Zeichen betragen
    if (!in_array(strlen($hex), [3, 6], true)) {
        return false;
    }

    return ctype_xdigit($hex);
}

$inputs = ['#FF8800', '#abc', '#GGHHII', '#12345', 'FF0000'];
foreach ($inputs as $input) {
    $valid = validateHexColor($input) ? 'gültig' : 'ungültig';
    echo "$input => $valid\n";
}
#FF8800 => gültig #abc => gültig #GGHHII => ungültig #12345 => ungültig FF0000 => gültig

MD5-Hash-Format prüfen

<?php
function isMd5Hash(string $hash): bool {
    return strlen($hash) === 32 && ctype_xdigit($hash);
}

$hash1 = md5('Hallo Welt');        // echten Hash erzeugen
$hash2 = 'xyz123nicht_gueltig__';

var_dump(isMd5Hash($hash1)); // true
var_dump(isMd5Hash($hash2)); // false
bool(true) bool(false)

// Wichtig · Fallstricke

Leerer String: Ab PHP 8.1 gibt ctype_xdigit('') konsistent false zurück. In älteren PHP-Versionen (vor 8.1) lieferte ein leerer String true, was zu schwer auffindbaren Bugs führen konnte – insbesondere wenn eine leere Eingabe irrtümlich als gültig akzeptiert wurde.

Kein Präfix 0x: Das übliche Hexadezimal-Präfix 0x aus PHP/C ist kein gültiges Hex-Zeichen. Wer hexadezimale Zahlendarstellungen inkl. Präfix prüfen möchte, muss das Präfix zuvor manuell entfernen (z. B. mit str_starts_with() und substr()).

Nicht-String-Argumente: In PHP 8.x gibt die Funktion bei nicht-string-Eingaben direkt false zurück. In PHP 7.x und früher wurden Integer-Werte als ASCII-Zeichencode interpretiert, was unerwartetes Verhalten verursachen konnte. Deshalb stets sicherstellen, dass der Eingabewert ein String ist.