Signatur
Beschreibung
ctype_punct() gehört zur ctype-Erweiterung und prüft, ob jedes Zeichen im übergebenen String ein druckbares Sonderzeichen (Interpunktions- oder Sonderzeichen) ist. Gemeint sind die ASCII-Zeichen aus den Bereichen 33–47, 58–64, 91–96 und 123–126, also beispielsweise !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ; usw.
Die Funktion ist nützlich, wenn geprüft werden soll, ob eine Eingabe ausschließlich aus Sonderzeichen besteht – etwa bei der Validierung von Trennzeichen-Strings oder der Erkennung unerwünschter Eingaben. Sie gibt true zurück, wenn der String mindestens ein Zeichen hat und jedes Zeichen ein Sonderzeichen im oben genannten Sinne ist.
Wichtig: Leerzeichen, Buchstaben und Ziffern führen stets zu false. Der String muss außerdem nicht leer sein – ein leerer String ergibt immer false. Nicht-ASCII-Zeichen (also Werte über 127) sind ebenfalls nicht erlaubt und liefern false.
Im Vergleich zu regulären Ausdrücken ist ctype_punct() sehr performant, da sie keine Regex-Engine benötigt und direkt auf C-Bibliotheksfunktionen zurückgreift.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $text Pflicht | string | Der zu prüfende String. Jedes enthaltene Zeichen muss ein druckbares Sonderzeichen (ASCII 33–47, 58–64, 91–96, 123–126) sein, damit die Funktion true zurückgibt. |
Rückgabewert
true zurück, wenn $text nicht leer ist und jedes Zeichen ein druckbares Sonderzeichen darstellt. Andernfalls wird false zurückgegeben – auch bei leerem String.Beispiele
Grundlegende Verwendung mit verschiedenen Eingaben
<?php
$tests = [
'!@#$%', // nur Sonderzeichen
'...', // nur Punkte
'abc', // nur Buchstaben
'123', // nur Ziffern
'!abc', // gemischt
'! @', // enthält Leerzeichen
'', // leerer String
'-+*/', // arithmetische Operatoren
];
foreach ($tests as $test) {
$result = ctype_punct($test) ? 'true' : 'false';
echo var_export($test, true) . ' => ' . $result . PHP_EOL;
}
Prüfung eines benutzerdefinierten Trennzeichen-Strings
<?php
function validateSeparator(string $separator): bool {
if (!ctype_punct($separator)) {
throw new InvalidArgumentException(
'Der Separator darf nur aus Sonderzeichen bestehen.'
);
}
return true;
}
$validSeparators = ['---', '===', ':::', '***'];
$invalidSeparators = ['-- ', 'abc', '', '1-2'];
foreach ($validSeparators as $sep) {
try {
validateSeparator($sep);
echo "'{$sep}' ist ein gültiger Separator." . PHP_EOL;
} catch (InvalidArgumentException $e) {
echo "Fehler: " . $e->getMessage() . PHP_EOL;
}
}
foreach ($invalidSeparators as $sep) {
try {
validateSeparator($sep);
echo "'{$sep}' ist ein gültiger Separator." . PHP_EOL;
} catch (InvalidArgumentException $e) {
echo "Fehler bei '{$sep}': " . $e->getMessage() . PHP_EOL;
}
}
// Wichtig · Fallstricke
Achtung bei Integer-Eingaben (PHP < 8.1): Vor PHP 8.1 akzeptierte ctype_punct() auch Ganzzahlen und interpretierte diese als ASCII-Zeichencodes. Seit PHP 8.1 wird bei nicht-string-Werten eine Deprecation-Warnung ausgegeben; ab PHP 9 wird dies vollständig entfernt. Immer Strings übergeben!
Nur ASCII: Die ctype-Funktionen arbeiten ausschließlich mit dem ASCII-Zeichensatz (0–127). Multibyte-Zeichen (UTF-8, ISO-8859 etc.) führen zu false. Für Unicode-Strings sollte stattdessen preg_match() mit dem /u-Modifier genutzt werden.
Leerer String: Ein leerer String ergibt stets false – dies sollte bei der Validierung bedacht werden.