Signatur
Beschreibung
ctype_xdigit() gibt true zurück, wenn jedes Zeichen des übergebenen Strings eine gültige Hexadezimalziffer ist – also zu den Ziffern 0–9 oder den Buchstaben a–f bzw. A–F gehört. Enthält der String andere Zeichen (z. B. Leerzeichen, g–z, 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
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)
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";
}
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
// 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.