3436 Stimmen

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.

AntwortenPositivNegativDatumStimmen
917 Stimmen

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

AntwortenPositiv Negativ
012 Stimmen

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

AntwortenPositiv Negativ
713 Stimmen

Guter Vorschlag.

Ich habe eine Möglichkeit auf beliebige Buchstaben zu prüfen zu dem Artikel hinzugefügt.
13.01.2015 um 01:37

Positiv Negativ
Antworten
-214 Stimmen

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

AntwortenPositiv Negativ
414 Stimmen

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

Positiv Negativ
711 Stimmen

...nur wenn der Käse riecht :) :) :)

;)
30.04.2017 um 08:20

Positiv Negativ
711 Stimmen

...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

Positiv Negativ
610 Stimmen

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

Positiv Negativ
Antworten
35 Stimmen

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

AntwortenPositiv Negativ
79 Stimmen

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

Positiv Negativ
Antworten
Antworten

Ü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

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.