Regulärer ausdruck gesucht

Haargel leer? Neue Freundin? Stromausfall? Teeladen überfallen? Server abgestürzt? Treppenhaus frisch gestrichen? Bus verpasst? Neuer Fernseher? Alles was niemanden interessiert, aber trotzdem irgendwie raus muss kannst Du hier loswerden...

Moderator: Super-Mod

Regulärer ausdruck gesucht

Beitragvon Robert 3.0 » 08.08.2006 19:38

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
Robert 3.0
.
.
 
Beiträge: 4
Registriert: 08.08.2006 14:19

Beitragvon Bob » 09.08.2006 22:22

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.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon Robert 3.0 » 10.08.2006 11:01

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:
Robert 3.0
.
.
 
Beiträge: 4
Registriert: 08.08.2006 14:19


Zurück zu Talk Talk Talk

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste