46 Stimmen

PHP: Strings mit Ctype-Funktionen auf Zeichenklassen überprüfen

Artikel von Stefan Trost | Letztes Update am 10.05.2021 | Erstellt am 13.06.2012

Will man die Zeichen eines Strings testen und überprüfen, ob diese nur aus bestimmten Zeichenklassen (Buchstaben, Zahlen, etc) bestehen, werden dafür meistens reguläre Ausdrücke verwendet.

Allerdings sind die regulären Ausdrücke in mehrfacher Hinsicht keine ideale Lösung. Zum ersten erfordern sie einen hohen Aufwand in der Programmierung. Sie sind sperrig im Code und es schleichen sich schnell Fehler ein. Zum zweiten lässt auch die Performance von derartigen Funktionen zu wünschen übrig, da einige Schritte notwendig sind, um einen Code mit einem regulären Ausdruck zu interpretieren und anzuwenden und nicht auf native Implementierungen zurückgegriffen werden kann.

Gerade für die häufigsten Tests wie nur Buchstaben, nur Zahlen oder nur Zahlen und Buchstaben bieten sich eine Reihe von Funktionen an, die ich in diesem Artikel vorstellen möchte und die noch relativ selten in der Praxis ihre Anwendung finden.

Die Rede ist von den Ctype Funktionen, die direkt in C geschrieben und optimiert wurden und daher auch um einiges performanter als alle anderen Lösungen wie reguläre Ausdrücke oder alle Formen von is_int(), is_string() und Co arbeiten.

Im folgenden möchte ich euch alle Ctype Funktionen und die Zeichenklassen, für die sie verwendet werden können, vorstellen. Zu erwähnen ist dabei, dass sich die beschriebenen Klassen über die locale-Einstellungen mit setlocale() ändern lassen. Das würde aber an dieser Stelle zu weit gehen.

Auf Buchstaben prüfen (ctype_alpha)

if (ctype_alpha($string)) { echo 'Nur Buchstaben'; }
ctype_alpha('AzUiL') //true
ctype_alpha('A bCX') //false

Die Funktion ctype_alpha() testet, ob der übergebene String nur aus Buchstaben besteht. Sie gibt true zurück falls der String nur aus Klein- oder Großbuchstaben von A-Z besteht. Sobald ein Zeichen kein Klein- oder Großbuchstabe dieses Bereichs ist, gibt ctype_alpha() false zurück.

Auf Ziffern prüfen (ctype_digit)

if (ctype_digit($string)) { echo 'Nur Ziffern'; }
ctype_digit('12345') //true
ctype_dight('12,45') //false
ctype_digit('ABC12') //false

Die Funktion ctype_digit() gibt nur dann true zurück, wenn alle Zeichen des übergebenen Strings nur aus Ziffern bestehen. Sobald ein Zeichen keine Ziffer ist, gibt es false. Demnach ist selbst ein String wie "1,2" oder "1.2" false.

Auf Buchstaben und Ziffern prüfen (ctype_alnum)

if (ctype_alnum($string)) { echo 'Nur Ziffern oder Buchstaben'; }
ctype_alnum('12345') //true
ctype_alnum('AzazO') //true
ctype_alnum('12AT9') //true
ctype_alnum('su.78') //false

Die Funktion ctype_alnum() gibt true zurück, wenn der String nur aus den Zeichen A bis Z, a bis z und 0 bis 9 besteht, es dürfen also Ziffern und Buchstaben vorkommen. Sobald ein Zeichen nicht in diese Klasse fallen, gibt es false zurück.

Klein- und Großbuchstaben (ctype_lower/upper)

if (ctype_lower($string)) { echo 'Nur Klein-Buchstaben'; }
if (ctype_upper($string)) { echo 'Nur Groß-Buchstaben'; }
ctype_lower('AzAzU') //false
ctype_lower('azazu') //true
ctype_upper('ABCD8') //false
ctype_upper('IUAOP') //true

Will man überprüfen, ob ein String nur aus den Kleinbuchstaben a bis z besteht, kann man die Funktion ctype_lower() benutzen. Die Funktion ctpye_upper() kann man dazu verwenden, um zu prüfen, ob ein String nur aus den Großbuchstaben A bis Z besteht.

Auf druckbare Zeichen prüfen

if (ctype_graph($string)) { echo 'Druckbar, aber kein Leerzeichen'; }
if (ctype_print($string)) { echo 'Druckbar oder Leerzeichen'; }
ctype_graph('abc123#+*-.!')  //true
ctype_graph('abc\n\r\t')     //false
ctype_graph('abc abc 123')   //false
ctype_print('abc123#+*-.!')  //true
ctype_print('abc\n\r\t')     //false
ctype_print('abc abc 123')   //true

Mit den Funktionen ctype_graph() und ctype_print lässt sich prüfen, ob ein String nur aus druckbaren Zeichen besteht. Druckbare Zeichen sind Zeichen, die auch tatsächlich eine Ausgabe bewirken, also zum Beispiel Buchstaben, Ziffern, sichtbare Sonderzeichen wie Punkte, Ausrufezeichen und so weiter. False wird zurückgegeben, wenn die Zeichen nicht sichtbar sind, wie zum Beispiel Steuerzeichen, Zeilenumbrüche oder Tabs.

Der Unterschied zwischen ctype_graph() und ctype_print() besteht darin, wie mit Leerzeichen umgegangen wird. Im Falle von ctype_graph() wird false zurückgegeben, sobald Leerzeichen in dem String auftauchen, im Falle von ctype_print() wird true zurückgegeben wenn in dem String andere druckbare Zeichen und Leerzeichen enthalten sind.

Whitespace, Sonderzeichen und Steuerzeichen

if (ctype_cntrl($string)) { echo 'Nur Steuerzeichen'; }
if (ctype_punct($string)) { echo 'Keine Buchstaben/Ziffern/Leerzeichen'; }
if (ctype_space($string)) { echo 'Nur Whitespace'; }
ctype_cntrl('abc\n123')  //false
ctype_cntrl('\n\r\t')    //true
ctype_punct('abcdef!')   //false
ctype_punct('#+*-.!')    //true
ctype_space('     ')     //true
ctype_space('/n/t')      //true
ctype_space('abc/nab 1') //false

Die Funktion ctype_cntrl() prüft, ob der String nur aus Steuerzeichen besteht. Sie gibt true zurück, wenn ausschließlich Tabs, Zeilenumbrüche und andere Steuerzeichen in dem String enthalten sind. Sobald andere Zeichen im String vorkommen, wird false zurückgegeben.

Mit ctype_punct() können Sie prüfen, ob der String nur aus Sonderzeichen wie Punkten, Klammern, Ausrufezeichen und so weiter besteht, die man auch drucken kann. False  gibt es zurück, wenn der String Buchstaben, Ziffern, Leerzeichen oder nicht druckbare Sonderzeichen wie Zeilenumbrüche und ähnliche enthält.

Die Funktion ctype_space() lässt sich benutzen, um einen String zu testen, ob er aus Zeichen besteht, die in irgendeiner Form Leerzeichen erzeugen. Das sind zum Beispiel Tabs, normale Leerzeichen oder Zeilenumbrüche.

Auf Hexadezimalziffern prüfen (ctype_xdigit)

if (ctype_xdigit($string)) { echo 'Ist Hexadezimalziffer'; }
ctype_xdigit('A09BC81')  //true
ctype_xdigit('af179d')   //true
ctype_xdigit('AP12222')  //false

Mit der Funktion ctype_xdigit() lässt sich ein String darauf überprüfen, ob er eine Hexadezimalziffer ist. Eine solche Ziffer kann nur aus den Ziffern 0 bis 9 sowie den Buchstaben A bis F bestehen. Sinnvoll ist ctype_digit() zum Beispiel um zu prüfen, ob es sich bei einer Nutzereingabe wirklich um einen Farbwert in hexadezimaler Schreibweise handelt.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

HTACCESS: URL vereinfachen

Tutorial | 0 Kommentare

PHP: Zeit und Performance messen

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.