Home
Navigation
Impressum
SEO Welten - Webcoding, Editoren, Scripte und Anwendungen
SEO Welten
Buchempfehlungen
 

RegEx: Verwendung von regulären Ausdrücken

Mit regulären Ausdrücken Formulareingaben filtern

Übersicht / Seite:

  1. Reguläre Ausdrücke (kleine Einführung mit Beispielen zur Syntax)
  2. Formulareingaben überprüfen (Eingaben auf Vollständigkeit überprüfen)
  3. Reguläre Ausdrücke mit PHP prüfen (...und RewriteRules testen)
  4. Mit Regex in Dateien suchen (kleines Script mit Suchfunktion)
  5. Im Quelltext/Quellcode suchen (Script zur Suche in Dateien)

Vorbemerkungen zur Syntax

Beinahe gleich, um welche Script- oder Programmiersprache es sich auch immer handeln mag, wer sich ernsthaft mit dem Erlernen einer Programmiersprache beschäftigen möchte, wird früher oder später nicht um die Verwendung von regulären Ausdrücken herum kommen. Beim Einstieg in PHP sieht die Angelegenheit nicht anders aus. Bereits beim ersten, gegen unlautere Eingaben abzusichernden Formular, kommt ein Programmierer mit der Nutzung von Filterfunktionen und regulären Ausdrücken in Berührung.
Der einzige Ausweg, der einem unerfahrenen Programmierer anfänglich noch verbleiben würde, insofern er sich nicht gleich mit der Syntax von regulären Ausdrücken belasten möchte, wäre die Möglichkeit im Internet nach einem passenden Code-Schnipsel zu suchen. Findet er einen geeigneten Code-Schnipsel, könnte er diesen kopieren und ins eigene Listing übernehmen. Doch Vorsicht! Mit dem Kopieren verhält es sich wie mit dem Abschreiben in der Schule, da durch eigene Unwissenheit schnell kleinere oder größere Fehler mit übernommen und im ungünstigsten Fall durch diese Vorgehensweise größere Sicherheitslücken geschaffen werden.

Nachfolgend ein Beispiel für einen einst gefertigten, voll funktionsfähigen Code-Schnipsel, bei dem dennoch die Syntax nicht stimmt. Gedacht war dieser Schnipsel ursprünglich zur Absicherung von Formularen. Mit Hilfe der PHP-Funktion preg_replace() sollte aus den übermittelten Formulareingaben alle unerwünschten Zeichen ausgefiltert und nur Buchstaben einschließlich Umlauten, Ziffern und typische Satzzeichen durchgelassen werden.

Ein voll funktionfähiges Beispiel mit fehlerhafter Syntax:

<?php

$eing = "Ein {Teststring: Version/1.0} + ein weiteres Wort?!";

$ausg = preg_replace("/[^a-zA-ZäöüÄÖÜß0-9\.,:;\-\!\?\+]/"," ",$eing);

echo "Ausgabe: ".$ausg."\n";

// Ausgabe: Ein Teststring: Version 1.0 + ein weiteres Wort?!

?>

Die Fehler sind in diesem kleinen Exempel noch relativ harmlos, doch wo liegen diese Fehler? Im Beispiel werden innerhalb einer mit eckigen Klammer eingefassten Zeichenauswahl mehr "vermeintliche" Metazeichen mit einem Backslash maskiert, als es in einer benutzerdefinierten [Zeichenklasse] gibt. Weiterhin wurde die Position des Minuszeichens unpassend gewählt.
Dazu sollte ein Coder wissen, dass außer dem \ Backslash, dem ^ Hütchenzeichen (Zirkumflex), dem - Minuszeichen und der schließenden eckigen ] Klammer alle sonstigen Zeichen keine Bedeutung als Metazeichen innerhalb einer Zeichenklasse besitzen. So steht zum Beispiel ein unmaskierter Punkt in einem regulären Ausdruck für ein beliebiges Zeichen. Innerhalb einer Zeichenklasse ist hingegen ein Punkt nur ein Punkt und kein Metazeichen und braucht somit nicht durch einen Backslash als Escape-Sequenz maskiert zu werden. Einzig dem Umstand, dass PHP unnütze Maskierungen von "normalen" Zeichen ignoriert bzw. die Zeichen innerhalb einer Escape-Sequenz als "normal" behandelt, ist es zu verdanken, dass die Funktion preg_replace() im obigen Beispiel wie erwartet ihre Arbeit verrichtet.

Ferner sollte bedacht werden, dass sich mehrere kleine Schnitzer schnell zu einem größeren Fehler summieren können. Um bei dem gewählten Beispiel zu bleiben, ein Minuszeichen, welches innerhalb einer Zeichenklasse zwischen einzelnen Zeichen steht, wird von PHP nicht als Minuszeichen gewertet, sondern als Kennzeichen für einen von bis Bereich. Vom A-Z Bereich haben wir noch eine klare Vorstellung von den in diesem Bereich enthaltenen Zeichen. Doch welche Zeichen befinden sich in einem unbewusst gewählten Bereich? Wird das Minuszeichen hingegen an den Anfang oder an das Ende einer Zeichenklasse eingefügt, kann es keinen Bereich mehr kennzeichnen und wird als einzelnes Zeichen ausgewertet.

Nachfolgend das obige, jedoch von überflüssigen Escapezeichen (Backslash)
bereinigte Beispiel:

<?php

$eingabe = "Ein {Teststring: Version/1.0} + ein weiteres Wort?!";

$ausgabe = preg_replace("/[^a-zA-ZäöüÄÖÜß0-9.,:;!?+-]/"," ",$eingabe);

echo "Ausgabe: ".$ausgabe."\n";

// Ausgabe: Ein Teststring: Version 1.0 + ein weiteres Wort?!

?>

Wie die Gegenüberstellung der beiden Exempel zeigte, ist nicht nur das Erlernen einer Script- oder Programmiersprache wichtig, um sichere Anwendungen zu programmieren, sondern ein Programmierer sollte reguläre Ausdrücke und deren Syntax zumindest verstehen. Doch was sind eigentlich reguläre Ausdrücke?
 

Was sind reguläre Ausdrücke?

Bei regulären Ausdrücken handelt es sich um Suchmuster, die geeignet sind Zeichenketten nach vorgegebenen oder vom Benutzer frei definierten Kriterien zu durchsuchen. Die Kurzform RegEx, ebenso die deutsche Bezeichnung für einen regulären Ausdruck, leiten sich dabei von der englischen Bezeichnung Regular Expression ab. Je nach dem beabsichtigten Ergebnis, können die Suchmuster recht komplexe Formen annehmen und umfangreiche Veränderungen von Zeichenketten (Strings) ermöglichen.

So wurde in den bisherigen Beispielen nicht nach Buchstaben oder Zahlen gesucht, da durch einen Zirkumflex am Anfang der Zeichenklasse (Character Class) alle Buchstaben des lateinischen Alphabetes sowie europäische Ziffern des Dezimalsystems und einige Satzzeichen negiert wurden. Vielmehr wurde nach allen Zeichen gesucht, die nicht in der definierten Zeichenklasse aufgeführt sind, um diese durch ein Zeichen oder eine Zeichenkette zwischen " " zu ersetzen, im Beispiel durch ein Leerzeichen (Whitespace) " ".

Je nach der verwendeten Script- oder Programmiersprache gibt es unterschiedliche Implementierungen in Form von Programm-Bibliotheken, in den die erforderlichen Funktionen enthalten sind. So ist in PHP ist eine PCRE-Bibliothek enthalten. Das Kürzel PCRE steht dabei für die englische Bezeichnung Perl Compatible Regular Expressions. Bis zur PHP Version kleiner 5.3 wurde auch noch POSIX Regex unterstützt, gilt jedoch seither als veraltet.

Die Verwendungsmöglichkeiten und die Komplexität von regulären Ausdrücken beginnen bei einfachsten Anwendungen und Suchmustern, wie der Suche nach einzelnen Zeichen, Silben oder Worten in einer Zeichenkette. Reguläre Ausdrücke können aber auch für aufwendige Suchvorgänge genutzt werden und in diesen Fällen oftmals umfangreiche Suchmuster erforderlich machen. Den Einsatzmöglichkeiten werden praktisch nur Grenzen durch die jeweilige Programmiersprache und durch die jeweils zur Verfügung stehende Rechenleistung gesetzt.
Auf der folgenden Seite ein Beispiel, um die in einem Formular eingegebenen Namen auf die Korrektheit der bei Namen übliche Syntax zu überprüfen.

weiterlesen » Formulareingaben überprüfen | mit PHP prüfen | Suchfunktion

 
Navigation

Finden und
gefunden werden ...


- Optimierung -

 

Webcoding

Übersicht


Web Services


Tutorials &
diverse Listings

und vieles mehr...


XML


Copyright © 2006 - Verlag Horst Müller - Stendal | Datenschutz | Nutzungsbedingungen