Dolio
Impressum Kontakt Neues Sitemap Suche

reguläre Ausdrücke

Es handelt sich um Vergleichsausdrücke mit Platzhaltern, mit denen man feststellen kann, ob eine Zeichenkette einem bestimmten Muster entspricht. Man kann reguläre Ausdrücke zur Gültigkeitsprüfungen in Formularen einsetzen.

Aufbau von regulären Ausdrücken

^ Anfang eines Strings
$ Ende eines Strings
. ein beliebiges Zeichen
\. Einen Punkt, “.“, mit “.“ suchen. Weitere Zeichen (+?* etc.)
x? optional (einmal oder gar nicht) vorhandenes "x"
x* Kein oder mehrfaches Vorkommen von "x"
x+ Ein oder mehrere Vorkommen von "x"
x{m} "x" tritt genau m Mal auf
x{m,} "x" muss mindestens m Mal auftreten
x{,n} "x" darf höchstens n Mal auftreten
x{m,n} "x" muss zwischen m und n Mal auftreten.
x{2,4} Mindestens 2, höchstens 4 Vorkommen von "x"
() Klammern für Ausdrücke
(n|a) Entweder "n" oder "a"
[1-6] eine Zahl zwischen 1 und 6
[c-h] ein Kleinbuchstabe zwischen c und h (c,d,e,f,g,h)
[D-H] ein Großbuchstabe zwischen D und H (D,E,F,G,H)
[^a-z] kein Vorkommen von Kleinbuchstaben zwischen a und z
[_a-zA-Z] ein Unterstrich und ein beliebiger Buchstabe des Alphabets
\s Leerzeichen
\ Escape-Zeichen, u.a. für ?‘ " -

Beispiele

xy* steht für x, xy, xyy, xyyy, ..
xy+ steht für xy, xyy, xyyy, ..
xy? steht für x oder xy
xy{3} steht für xyyy
[ab]+ passt auf "a", "b", "aa", "bbaab" etc.
(a|b)(c|d) Trifft auf die Zeichenketten "ac", "ad", "bc" und "bd" zu.
(a(b|c)|def) Klammern können beliebig geschachtelt werden, dieser Ausdruck trifft daher auf die Zeichenketten "ab", "ac" oder "def" zu.
.* Trifft auf jede beliebige Zeichenkette (auch eine leere) zu.
.+ Das Pluszeichen steht für Anzahlen von 1 oder mehr.
.? Ein Zeichen oder keines.
.+ Das Pluszeichen steht für Anzahlen von 1 oder mehr Zeichen.
[0-9]{4} Genau 4 Zahlen
[0-9]+\s? 1 bis beliebig viele Zahlen und ein oder kein Leerzeichen sind zugelassen
[.a-z0-9_-]+@[.a-z0-9-]+ E-Mail Adressencheck

In vielen neueren Implementationen können innerhalb der eckigen Klammern auch Klassen angegeben werden, die selbst wiederum eckige Klammern enthalten. Sie lauten beispielsweise:

[:alnum:] Alphanumerische Zeichen: [:alpha:] und [:digit:].
[:alpha:] Buchstaben: [:lower:] und [:upper:].
[:blank:] Leerzeichen und Tabulator.
[:cntrl:] Steuerzeichen. Im ASCII sind das die Zeichen 00 bis 1F, und 7F (DEL).
[:digit:] Ziffern: 0, 1, 2,... bis 9.
[:graph:] Graphische Zeichen: [:alnum:] und [:punct:].
[:lower:] Kleinbuchstaben1: nicht notwendig nur von a bis z.
[:print:] Druckbare Zeichen: [:alnum:], [:punct:] und Leerzeichen.
[:punct:] Zeichen wie: ! " # $ % & ‘ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~ .
\s Whitespace: Horizontaler und vertikaler Tabulator, Zeilen- und Seitenvorschub, Wagenrücklauf und Leerzeichen.
[:upper:] Großbuchstaben1: nicht notwendig nur von A bis Z.
[:xdigit:] Hexadezimale Ziffern: 0 bis 9, A bis F, a bis f.

Beispiel einer Implementierung in PHP

$postleitzahl="^[0-9]{4}$";#genau vier Zahlen
if (!ereg($postleitzahl, $plz)) {
$ok="false";
$plzantwort="4 Zahlen für die Postleitzahl eingeben!" ;
}

Die Funktion ereg() ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 entfernt. Sich auf diese Funktion zu verlassen ist in keiner Weise empfehlenswert.

if (isset($_POST["postleitzahl"]) and !empty($_POST["postleitzahl"])) {
	$postleitzahl=$_POST["postleitzahl"]; 
	$muster_plz="/^[0-9]{4}$/";#genau vier Zahlen
	if (!preg_match($muster_plz, $postleitzahl)) {
		echo "keine übereinstimmung";
		$ok="false";
		$plztext=" 4 Zahlen für die Postleitzahl eingeben!" ;
	}
}
else {
	$ok="false";$plztext=" Postleitzahl eingeben!";
}

Überprüfung einer E-Mail-Adresse

if (isset($_POST["email"]) and !empty($_POST["email"])) {
	$email=$_POST["email"]; 
	$vordere_teil="[a-zA-Z0-9][a-zA-Z0-9_\.-]*[a-zA-Z0-9]";#Bsp.: o.dolinsek
	$hintere_teil="[a-zA-Z0-9][a-zA-Z0-9_\.-]*\.[a-zA-Z]{2,4}";#Bsp.: inode.at
	$muster_email="/^".$vordere_teil."@".$hintere_teil."$/";
	if (!preg_match($muster_email, $email)) {
		#echo "keine Übereinstimmung";
		$ok="false";
		$emailtext=" Das ist keine E-Mail-Adresse!" ;
	}
}
else {
	$ok="false";$emailtext=" E-Mail-Adresse eingeben!";
}