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.
Über den Autor
Software 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
PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp | 10 Kommentare
MySQL: Zeilenumbrüche in MySQL
Tipp | 0 Kommentare
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
Tutorial | 0 Kommentare
Text nur in bestimmten Zeilen ersetzen
Tutorial | 0 Kommentare
Textdateien mit fester Zeilenlänge umschreiben
Tutorial | 0 Kommentare
Buchstaben-Häufigkeit in einem Text zählen
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.