Seite 1 von 1

Regulärer ausdruck gesucht

Verfasst: 08.08.2006 19:38
von Robert 3.0
Sorry fürs eventuelle OT.

Vorweg: Ich habe von Regulären Ausdrücken nicht sonderlich viel Ahnung.
Jetzt bin ich auf der Suche nach einem regulären Ausdruck, der folgendes prüft.
1. Erlaubte Zeichen: "a-z", "0-9", "." (Punkt) und "-" (Bindestrich).
2. Fängt er mit einem Buchstaben oder einer Zahl an?
3. Hört er mit einem Buchstaben oder einer Zahl auf?
4. Sind maximal 3 Punkte und maximal 3 Bindestriche enthalten?
4. Ist er mindestens 5 und maximal 32 Zeichen lang?
5. Das Ganze ist nicht Case-Sensitive, weil ich vorher aller lowercase mache.

Ich bin für jede Schandtat bereit, wenn mir jemand diese RegEx bastelt oder einen Link postet. ;)
Mache nämlich schon seit Stunden damit rum ...
Vielen, vielen Dank
Robert

Verfasst: 09.08.2006 22:22
von Bob
Das kannst du mit einer RegEx alleine nicht prüfen, da musst du mit if/elseif/else Konstrukten arbeiten, die dann per preg_match prüfen.

z.B.

Code: Alles auswählen

<?php

# 1. und 5.
if(!preg_match("/^[a-z0-9.-]{5,32}$/", $string))
    exit;

# 4.
if(substr_count($string,'.') >3 || substr_count($string,'-') >3)
    exit;

# 2.
if(preg_match("/^[a-z]/", $string)) {
    echo 'beginn buchstabe';
}
elseif(preg_match("/^[0-9]/", $string)) {
    echo 'beginn zahl';
}
else {
    exit;
}

#3.
if(preg_match("/[a-z]$/", $string)) {
    echo 'ende buchstabe';
}
elseif(preg_match("/^[0-9]$/", $string)) {
    echo 'ende zahl';
}
else {
    exit;
}
?>
Immer dann, wenn etwas nicht erfüllt ist, wird über exit abgebrochen.

Verfasst: 10.08.2006 11:01
von Robert 3.0
Vielen Dank, Robert!

Lustiger Weise habe ich Gestern beinahe das gleiche Script selbst geschrieben. Ich gehe halt mit "return $Eigener_Errorcode" raus. (sorry, dass ich es noch nicht gepostet habe).

Ich wollte mich nicht mehr weiter mit Regulären Ausdrücken "herumärgern" und bin deswegen auf reine if-Konstrukte ausgewichen. Die dann benötigten RegEx sind ja, wie man sieht, nicht mehr besonders komplex, weswegen ich sie auch schreiben konnte.

Sieht so aus als wäre meine "Notlösung" doch die richtige gewesen.

Mein Code sieht übrigens so aus:

Code: Alles auswählen

// Sind nur erlaubte Zeichen enthalten und ist der Alias zwischen 5 und 32 Zeichen lang?
if(!preg_match('/^[a-z0-9.-]{5,32}$/', $alias)) {
   return $Eigener_Errorcode;
}

// Sind jeweils maximal drei erlaubte Sonderzeichen enthalten?
if(substr_count($alias, '.') > 3 or substr_count($alias, '-') > 3) {
   return $Eigener_Errorcode;
}

// Ist Initial ein Buchstabe oder eine Zahl?
if(!preg_match("/^[0-9a-z]/", $alias)) {
   return $Eigener_Errorcode;
}

// Ist Abschluss ein Buchstabe oder eine Zahl?
if(!preg_match("/[0-9a-z]$/", $alias)) {
   return $Eigener_Errorcode;
}


Nochmal vielen Dank für deine Bemühungen. Du scheinst deinen Moderator-Job ernst zu nehmen.
Das finde ich sehr lobenswert!
Gruß, Robert

PS: Danke für das Verschieben in das "richtigere" Forum. :oops: