14 16 Stimmen

PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen

Tipp von Stefan Trost | 19.01.2013 um 17:29 Uhr

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 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
13 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 Uhr

AntwortenPositiv Negativ
11 Stimme

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 Uhr

AntwortenPositiv Negativ

Stefan Trost

Profil anzeigen | Nachricht
Avatar
11 Stimme

Guter Vorschlag.

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

Positiv Negativ
00 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 Uhr

AntwortenPositiv Negativ
00 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 Uhr

Positiv Negativ
00 Stimmen

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

;)
30.04.2017 um 08:20 Uhr

Positiv Negativ
Antworten

Über den Autor

Avatar AutorSoftware 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 | Nachricht

 

Ähnliche Themen

Wichtiger Hinweis

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.