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

RegEx: Mit regulären Ausdrücken Formulareingaben prüfen

Eingaben auf Vollständigkeit überprüfen

Ü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)

Ein praktisches Beispiel

Nach der kleinen Einführung zur Syntax von regulären Ausdrücken auf der vorausgehenden Seite, folgt auf dieser Seite ein praktisches Beispiel zur Anwendung. Die in einem Formular eingegebenen Namen sollen im Beispiel auf Korrektheit überprüft werden, in dem die bei Vor- und Nachnamen übliche Syntax geprüft wird. Als Ausgangspunkt dient die nachfolgende Liste, in der ein bis Vornamen und ein bis zwei Nachnamen mal mit und mal ohne Bindestrich verbunden sind.

/*
  Bine von Sabine und nicht von der Honig sammelnden Biene.
  Namensgleichheiten sollten in dieser Konstellation nicht vorkommen,
  falls doch, so wären diese rein zufällig und keineswegs beabsichtigt.
*/


Bine Musterfrau

Heinz Müllermann Musterfrau
Heinz Müllermann-Musterfrau

Bine Sumsi Musterfrau
Bine-Sumsi Musterfrau

Karl Otto Mustermann Uebernbach
Karl-Otto Mustermann Uebernbach
Karl-Otto Mustermann-Uebernbach
 

Auf Grund der unterschiedlichen Anzahl von Vor- und Nachnamen, erwies sich ein einzelner regulärer Ausdruck bzw. ein einzelnes Suchmuster als unzureichend, so dass die eingegebenen Namen mehrmals hintereinander mit insgesamt drei Suchmustern verglichen werden, was sich wie im Beispiel problemlos mit einer Zählschleife realisieren lässt.
 

Ablauf der Überprüfung

Wurde durch einem Nutzer ein vollständiger Name in das entsprechende Formularfeld eingegeben und der Sendebutton betätigt, wird der Inhalt des Formulars per GET als QueryString übermittelt. Mit den PHP-Funktionen isset() und empty() wird überprüft, ob eine Variable mit dem Bezeichner "namen" übermittelt wurde und einen Wert enthält. Enthält die Variable "namen" einen String als Wert, wird von dessen Anfang und Ende eventuell vorhandener Whitespaces mit Hilfe der PHP-Funktion trim() entfernt.

Da die zu prüfende und an den Enden von Whitespaces befreite Zeichenkette nun mit einem großen Buchstaben beginnen und mit einem kleinen Buchstaben enden muss, kann diese Besonderheit als Erstes in einem Teilausdruck berücksichtigt werden.
Ein maskiertes \A steht im Muster für den Zeilenanfang und ein maskiertes \Z für das Zeilenende, die Zeichenklasse A-Z für die großen Buchstaben des lateinischen Alphabetes ohne Umlaute und die Zeichenklasse a-zäöüß für die kleinen Buchstaben des lateinischen Alphabetes einschließlich der Umlaute. Als Delimiter wird im Beispiel ein Slash (Schrägstrich) verwendet und die Anzahl der großen Buchstaben wird durch den in geschweiften Klammern enthaltenen Wert auf genau einen Buchstaben festgelegt. Bei den kleinen Buchstaben wird durch das Pluszeichen hingegen nur festgelegt, dass mindestens ein kleiner Buchstabe vorkommen muss. Der gesamte Ausdruck für einen einzelnen Vor- oder Zunahmen würde wie folgt aussehen:

"/ \A([A-Z]{1})([a-zäöüß]+)\Z/";

Wer möchte, könnte hier statt des Pluszeichens mit einer Vorgabe, wie zum Beispiel {1,20} arbeiten. Letzteres würde bedeuten, dass kleine Buchstaben mindestens 1 und höchsten 20 mal vorkommen dürfen.

Nun sollen mit Hilfe eines Formulars jedoch nicht nur einzelne Vor- oder Zunamen übermittelt und mit RegEx überprüft werden, sondern Vor- und Zunamen, bestehend aus einer unterschiedlichen Anzahl von Einzelnamen, wobei die Einzelnamen mal mit einem Leerzeichen getrennt werden und mal mit einem Bindestrich verbunden sind. Einzig die Verbindung (eigentlich Trennung) zwischen Vor- und Zuname/n besteht immer aus einem Leerzeichen. Für die Suche nach Leerzeichen (Whitespaces) lässt sich ein kleines \s verwenden und für die Suche nach einer Verknüpfung, die entweder aus einem Leerzeichen oder einen Bindestrich besteht, ein Oder-Muster, welches durch das Metazeichen | realisierbar wird.

"/ ...(\s{1,2}|-{1}).../";   // 1 bis 2 Leerzeichen | oder 1 Bindestrich

Eigentlich sollten nicht mehr als {1} Leerzeichen zwischen den Namen vorkommen, doch da Benutzer von Formularen sich zuweilen auch mal vertippen und unbemerkt 2 statt 1 Leerzeichen eingeben, sollte bei den Leerzeichen etwas großzügiger mit {1,2} verfahren werden. Wer möchte, der könnte ja überflüssige Leerzeichen abschließend wieder mit der Funktion preg_replace() herausfiltern und gegen ein einzelnen Leerzeichen austauschen.

Das komplette Listung zur Überprüfung von in einem Formular
eingegebenen Vor- und Zunamen:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>Ein Formular für Namen</title>
<meta http-equiv="Content-Type" content="text/html; charset=">
<meta http-equiv="Content-Style-Type" content="text/css">
</head>

<body>
<?php

if (isset($_GET["namen"]) and !empty($_GET["namen"])) {

$derString = trim($_GET["namen"]);

$muster1 = "/(\A([A-Z]{1})([a-zäöüß]+)\s{1,2}([A-Z]{1})([a-zäöüß]+)\Z)/";
$muster2 = "/(\A([A-Z]{1})([a-zäöüß]+)(\s{1,2}|-{1})([A-Z]{1})([a-zäöüß]+)(\s{1,2}|-{1})([A-Z]{1})([a-zäöüß]+)\Z)/";
$muster3 = "/(\A([A-Z]{1})([a-zäöüß]+)(\s{1,2}|-{1})([A-Z]{1})([a-zäöüß]+)\s{1,2}([A-Z]{1})([a-zäöüß]+)(\s{1,2}|-{1})([A-Z]{1})([a-zäöüß]+)\Z)/"; 


$i = 1;

for ($i; $i <= 3; $i++) {

    if ($i === 1) {$dasMmuster = $muster1;}
    if ($i === 2) {$dasMmuster = $muster2;}
    if ($i === 3) {$dasMmuster = $muster3;}

    preg_match($dasMmuster, $derString, $gefunden);

    if (!empty($gefunden[0])) {

    echo htmlentities($gefunden[0], ENT_QUOTES)."<br>\n<br>\n"; 
    }
}}


echo "\t<form name=\"beliebig\" action=\"".basename($_SERVER["PHP_SELF"])."\" method=\"get\" accept-charset=\"iso-8859-1\">\n".
     "\t<input type=\"text\" name=\"namen\" value=\"\" size=\"40\" maxlength=\"58\">\n".
     "\t<input type=\"submit\" value=\"Test\">\n".
     "\t</form>\n\n";


?>
</body>
</html>

Das bisherige Listing ist für den Zeichensatz ISO-8859-1 definiert und wurde mit einer ANSI-Kodierung abgespeichert. Soll als Zeichensatz und Kodierung hingegen UTF-8 verwendet werden, ist das Listing entsprechend anzupassen. Diese Anpassung kann gegebenenfalls durch eine eigene Funktion erfolgen, wie zum Beispiel die folgende:

function UmlautIN($umlautIN){

    $sucheum = array("ä","ö","ü","ß");
    $ersetze = array("ä","ö","ü","ß");
    $guteuml = str_replace($sucheum,$ersetze,$umlautIN);
return $guteuml; } /* Anwendung bei als UTF-8 definierte aber als ANSI kodiert abgespeicherte Dokumente: $derString = trim(UmlautIN($_GET["namen"])); */

Einfacher als die Verwendung von eigenen Funktionen dürfte es hingegen in der Mehrzahl der Fälle sein, Listing als UTF-8 kodierte Dokumente abzuspeichern oder gegebenenfalls PHP-Funktionen, wie utf8-decode() zu verwenden.

Einführung « Reguläre Ausdrücke » 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