Geschrieben von gero am 17.01.2006, 20:11

Dies ist der erste Teil meiner/s Regular Expressions Library/Tutorial.
Ich habe hier 3 der meist gebrauchten Ausdrücke in Funktionen zusammengefasst. Ihr könnt das Folgende Script kopieren und in einer PHP Datei speichern, wenn ihr diese Datei in ein Projekt einbindet, könnt ihr die Funktionen zum Überprüfen von EMail-Adressen, URLs und IPs benutzen. Dazu geht ihr wie folgt vor:
Ihr nehmt z.B. eine Usereingabe - eine Email Adresse - und speichert sie in der Variablen $xyz ab. wenn ihr nun diese EMail Adresse auf Syntaktische Korrektheit prüfen wollt ruft ihr die funtion valemail() auf. Ihr übergebt als Parameter die Variable mit der Adresse, also $xyz. Die Funktion überprüft den Wert und gibt anschließend einen als Rückgabewert (Return) TRUE oder FALSE wieder. So lässt sich die überprüfung leicht in eine if-Abfrage einbauen:


include('reg.php');

$xyz="hans@mustermann.de";
if(valemail($xyz)){
echo'Die Syntax der EMail Adresse ist korrekt.';
}
else{
echo'Die EMail Adresse ist falsch!';
}
?>

Hieran sehen wir, das man ganz einfache if abfragen machen kann.. wenn die EMail Adresse korrekt ist, gibt die Funktion TRUE zurück. Dies hat zur Folge das der if-Zweig der if anweisung durchgeführt wird. Hier wird dann mit echo eine Ausgabe gemacht. Falls die EMail Adresse falsch war, wird der else-Zweig ausgeführt und siehe da es erscheint die Meldung
"Die EMail Adresse ist falsch!"

Um die folgenden Funktionen erklähr bar zu machen, gebe ich hier noch ein paar hilfen vor:
^ -> Kennzeichnet den Beginn der Zeichenkette;
$ -> Kennzeichnet das Ende der Zeichenkette;

* -> Keines oder beliebig viele des vorangegenen zeichens; der klassiche Platzhalter;
+ -> Ein oder mehr des vorangegangenen zeichens;
? -> Kein oder genau eins des vorangegangenen zeichens;

{x,y} -> mindestens x und maximal y des vorangegangenen zeichens in Folge;
[a-zA-Z0-9] -> Fasst eine Auswahl von Zeichen zusammen die alle erlaubt sind; "a" ist an der entsprechenden Stelle genauso erlaubt wie "C" oder "6";
() ->Fasst verschiedene Operationen zusammen;

\. -> Steht für . da dieser bei Regulären Ausdrücken noch andere Funktionen hat;

Ich versuche mich wie ihr sicherlich gemerkt habt vor der genauen Erklährung wie ich die RegExpr gebastelt habe ein bischen zu drücken. Das stimmt genau genommen auch^^ ich war noch nie gut im erklären -.- Nichts desto trotz versuche ich einen Einblick in die RegExpr zu ermöglichen. Als Tip für die Anfänger, guckt euch am besten garnicht erst den Ausdruck für URLs an, dieser könnte ien bisschen verwirrend wriken^^ war auch pürodukt von über einer Stunde arbeit und ich würde mal so behaupten das ich was davon verstehe^^ also nicht gleich frustriert wieder gehen sondern vielleicht mit der Hilfe von Google etc. das ganze zu erlernen...

Ich hoffe ich habe euch mit dme Text nicht erschlagen.. hier kommt also jetzt der Code, den jeder frei benutzden darf, bei Fragen oder Anregungen bitte bei mir melden. Falls ihr Ideen habt welche Ausdrücke ich in meine "Library" noch aufnehmen könnte direkt melden^^ viel Spaß

greez
gero

edit: Habe jetzt mal eine anleitung zur email-reg gebaut:

1.
^[_a-zA-Z0-9-]+$ Dieser Teil untersucht den Mailnamen auf gültige Zeichen. Der Punkt fehlt noch.

2.
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$ Dieser Ausdruck akzeptiert auch den Punkt, allerdings nicht am Anfang oder am Ende des Namens.

3.
^[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$ Hier wird NUR der Domainname untersucht. Unterstriche sind nicht erlaubt, der Punkt ist zwingend und wird von 2 oder 3 zeichengefolgt, die wiederum nur Buchstaben sein können.

4.
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$ Das "Gebilde" ist nun schon recht unübersichtlich. Es ist eine Kombination aus dem vorderen und hinteren Teil, verbunden durch das @-Zeichen.

Um die Mailfunktion einsetzen zu können, ist noch eine weitere Verfeinerungnotwendig. Die Angabe von mehreren Domainnamen (z.B. name@subdomain.domain.com) ist noch nicht möglich.

5.
^([a-zA-Z0-9-]+\.)+ Der erste Teil des zweiten Ausdrucks kann deshalb mehrfach wiederholt wqerden, muss aber mindestens einmal forhanden sein. Somit lautet das endgültige Ergebnis:

"^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{1,3})$"


<?php
function valip($ip) /*IP check*/
{
$regip="^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$"; /*Der noch relativ einfache Ausdruck für IP Adressen;)*/

if(ereg($regip,$ip,$part)) /*Falls der übergebene Wert mit dem Ausdruck übereinstimmt, wird der if zweig ausgefürt und TRUE zurückgegeben, anderenfalls wird FALSE zurückgegeben.*/
{
if($part[1]<=255 && $part[2]<=255 && $part[3]<=255 && $part[4]<=255)
{
return TRUE;
}
}return FALSE;
}

function valemail($email) /*E-Mail check*/
{
$regemail="^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{1,3})$"; /*Der Ausdruck für Email Adressen*/

if(ereg($regemail,$email))
{
return TRUE;
}return FALSE;
}

/*Um frustration vorzubeugen bitte ab hier nur noch die gucken die sich auskennen^^*/
function valhturl($url) /*url check*/
{
$regurl="^http://([_a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})((/[_a-zA-Z0-9-]+)*((\.[_a-zA-Z0-9-]+)(\?(([_a-zA-Z0-9-]+=[_a-zA-Z0-9-]+)&*)*)?)?)(/*)$"; /*wusst ichs doch - doch geguckt - jetzt gib bitte nicht auf^^*/
if(ereg($regurl,$url))
{
return TRUE;
}return FALSE;
}
?>

THE END

Bewertung Anzahl
6
66,7 %
2 Bewertungen
4
33,3 %
1 Bewertungen