PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp von Stefan Trost | Letztes Update am 19.06.2023 | Erstellt am 19.01.2013
Heute möchte ich euch zeigen, wie ihr einen String prüfen könnt, ob dieser nur bestimmte Buchstaben, Zahlen und Zeichen enthält.
Ein Anwendungsgebiet wäre zum Beispiel das Prüfen von Benutzernamen, die nur aus bestimmten Zeichen oder Zeichengruppen bestehen dürfen.
Wir schauen uns dazu zunächst den folgenden Code an:
if (!preg_match("#^[a-zA-Z0-9]+$#", $text)) { echo 'String enthält auch andere Zeichen.'; } else { echo 'String enthält nur Buchstaben und Zahlen.'; }
Hier möchten wir überprüfen, ob der String $text nur aus Buchstaben (a bis z und A bis Z) oder Zahlen (Ziffern 0 bis 9) besteht. Dafür benutzen wir preg_match und einen regulären Ausdruck. Diesen übergeben wir als ersten Parameter an preg_match, wobei der eigentliche reguläre Ausdruck zwischen "# und #" steht.
Das Zeichen ^ steht für den Anfang des Strings, das Zeichen $ für das Ende des Strings. Dazwischen dürfen alle Zeichen aus der Zeichenklasse, die wird durch die eckigen Klammern definiert haben beliebig oft vorkommen. Das haben wir mit dem Plus hinter den eckigen Klammern ausgedrückt. Innerhalb der Zeichenklasse haben wir "a-z" für die Kleinbuchstaben, "A-Z" für die Großbuchstaben und "0-9" für die Ziffern notiert.
Auch auf Umlaute überprüfen
Naturgemäß sind die deutschen Umlaute noch nicht in der Zeichenklasse a-z oder A-Z enthalten. Wollen wir auch diese Zeichen zulassen, müssen wir sie extra notieren:
if (!preg_match("#^[a-zA-Z0-9äöüÄÖÜ]+$#", $text)) { echo 'String enthält auch andere Zeichen.'; } else { echo 'String enthält nur Buchstaben und Zahlen.'; }
Wir können also beliebige andere Zeichen mit in die Zeichenklasse aufnehmen, um auch auf diese Zeichen zu prüfen.
Auf Buchstaben generell prüfen
Bisher haben wir uns nur auf die deutschen Buchstaben inklusive der Umlaute beschränkt. Wie aber testet man, wenn man auch andere Buchstaben wie è, ø, é oder ă zulassen möchte? Schließlich können wir nicht alle erdenklichen Buchstaben in unseren regulären Ausdruck schreiben. Das folgende Beispiel zeigt eine Möglichkeit.
$text = "abcABCäöüÄÖÜßéèâø"; if (preg_match("#^\p{L}+$#u", $text)) { echo 'String enthält beliebige Buchstaben.'; }
L steht hier für einen beliebigen Buchstaben, \p für ein Zeichen mit der in den geschweiften Klammern dahinter definierten Eigenschaften und u für Unicode. Der reguläre Ausdruck prüft also auf beliebige, beliebig oft wiederholte Unicode-Zeichen. Dieser reguläre Ausdruck funktioniert ab der PHP-Version 5.1.0.
Mit L lässt man sowohl Kleinbuchstaben als auch Großbuchstaben zu. Möchte man dagegen nur auf kleine oder große Buchstaben prüfen, kann man statt L Ll (Letters lowercase) oder Lu (Letters uppercase) verwenden.
Leerzeichen zulassen
Das Hinzufügen beliebiger Zeichen zu unserem regulären Ausdruck gilt sogar für Leerzeichen. In diesem Beispiel haben wir noch ein Leerzeichen in die Zeichenklasse aufgenommen:
if (!preg_match("#^[a-zA-Z0-9äöüÄÖÜ ]+$#", $text)) { echo 'String enthält auch andere Zeichen.'; } else { echo 'String enthält nur Buchstaben, Zahlen und Leerzeichen.'; }
Damit sind nun auch Strings, die Leerzeichen enthalten erlaubt.
Punkte, Klammern und andere Sonderzeichen
Einige Zeichen haben eine spezielle Bedeutung innerhalb eines regulären Ausdrucks. Dazu gehören zum Beispiel Punkte oder Klammern. Wollen wir diese Zeichen in unsere Zeichenklasse aufnehmen, müssen wir dies so notieren:
if (!preg_match("#^[a-zA-Z0-9äöüÄÖÜ \.\]]+$#", $text)) { echo 'String enthält auch andere Zeichen.'; }
Mit dem \ können wir die betreffenden Zeichen escapen. Das heißt: Mit dem \ sagen wir, dass das nachfolgende Zeichen als Zeichen und nicht als reguläre Anweisung zu verstehen ist. So fügen wir im Beispiel einen Punkt und eine eckige Klammer zu unserer Zeichenklasse hinzu. Interessant am Ende: Die letzte eckige Klammer ist der Abschluss unserer Zeichenklasse, die vorletzte eckige Klammer ist mit einem \ versehen und damit Teil der Zeichenklasse.
Was aber, wenn wir auch das Zeichen \ zu unserer Klasse hinzufügen möchten? Ganz einfach. Auch das Zeichen \ lässt sich escapen, wir müssten also einfach \\ schreiben.
CType-Funktionen
Für bestimmte, häufig verwendete Zeichenklassen lassen sich sehr einfach die CType Funktionen von PHP verwenden. Mehr dazu in meinem CType String Tutorial. Der Vorteil der CType Funktionen ist, dass wir ohne regulären Ausdruck kommen und diese eine bessere Performance haben.
Ü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: Strings mit Ctype-Funktionen auf Zeichenklassen überprüfen
Artikel | 0 Kommentare
PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
Tutorial | 0 Kommentare
JavaScript: Letztes Zeichen aus String entfernen
Tipp | 0 Kommentare
PHP: Erste Stelle von Zahl oder String auslesen
Tutorial | 0 Kommentare
Delphi/Lazarus: Aktuelles Datum und Uhrzeit ausgeben
Tipp | 0 Kommentare
Mehrere Texte gleichzeitig ersetzen
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.
Super Tutorial, hamma, so gut erklärt hab ich das noch nie gefunden, 1A, weiter so, danke, vielen Dank!
17.09.2013 um 17:05
Gibt es eine Möglichkeit gegen alle Zeichen und Buchstaben zu prüfen?
Also auch solche, die in anderen Sprachen vorkommen, z.B. é, è, â, ...
12.01.2015 um 21:04
Guter Vorschlag.
Ich habe eine Möglichkeit auf beliebige Buchstaben zu prüfen zu dem Artikel hinzugefügt.
13.01.2015 um 01:37
Sehr schönes Tut, auch wenn schon über 3 jahre alt!
Leider muss man 100 Zeichen haben, dann schreibe ich mal was dazu :D Hoffe, dass es OK ist :D
26.07.2016 um 03:18
Und was hat das mit dem Alter zu tun? Werden Tutorials etwa schlechter mit der Zeit wie ein altes Stück Käse? ;)
26.07.2016 um 03:30
...nur wenn der Käse riecht :) :) :)
;)
30.04.2017 um 08:20
...schlechter nicht, nur nicht mehr auf dem neusten Stand, aber ich denke, dass dies der TUT-Schreiber schon berücksichtigt hat.
26.02.2018 um 17:33
Was in dem Tutorial soll denn deiner Meinung nach nicht mehr auf dem neuesten Stand sein?
Das fände ich jetzt ja mal interessant...
26.02.2018 um 18:12
Auch wenn der Beitrag etwas älter ist, so funktionieren die Schnipsel ganz gut.
In der Box mit den Leerzeichen fehlt im else-echo am Ende das ;
09.12.2018 um 10:33
Das ist das schöne an Code: Er ist nicht so schnell verderblich wie Lebensmittel.
Die Sache mit dem ; ist korrigiert. Vielen Dank für den Hinweis.
09.12.2018 um 11:46