Hallo Matze,
nungut, ab 9 wirds bei der Funktion zur Erkennung von einer aufsteigenden Reihe schwierig. Praktisch kommt danach die 10, für PHP aber 1 und 0. Somit ist das ganze Konstrukt, so schön es auch war ^^, unbrauchbar.
ich denke, Du denkst zu kompliziert.
Es geht Dir hier um *einfache* Überprüfungen.
Es geht um einfache Überprüfungen von _Zeichen_ einer Zeichengruppe.
Es geht nicht um die Bedeutung von zusammengesetzten Zeichen.
Genauso könntest Du argumentieren:
56710
ist nicht erlaubt, da vier aufeinanderfolgende Zahlen im Oktalsystem
1112123
ist nicht erlaubt, da es aufeinanderfolgende Stundenzahlen einer Analoguhr sind.
27281
ist nicht erlaubt, weil es aufeinanderfolgende Tage im Februar/März eines Nichtschaltjahres sind.
Wie willst Du 117118 berücksichtigen, wie 127012 oder 127001002 wegen 128-er-System?
Alles nicht besonders sinnvolle Prüfungen (meiner Meinung nach). Das gehört bestenfalls in ein Wörterbuch.
Aufsteigend in einer Zeichengruppe wäre - und Du musst das definieren und dokumentieren - z.B. 3456 und 7890.
Ähnlich verhält es sich mit Buchstaben:
xyzabc wäre z.B. als aufsteigend definierbar.
Aber was machst Du, wenn Du statt der 26 Buchstaben des englischen Alphabets den UTF-8-Zeichenvorrat zulässt? Wie prüfst Du dann? Siehe z.B. dieses Archivposting von dedlfix.
Hast du vielleicht noch andere Ideen was ich prüfen könnte?
An das aaa bzw. 111 hatte ich heut morgen z.B. noch gar nicht gedacht, obwohl es doch so naheliegend ist.
Prüf' nicht zuviel :-)
Wenn Du mehr als eine Zeichengruppe verlangst, dann werden andere Prüfungen obsolet. Ein "##" oder ein "aa" oder "ab" in einem Passwort, das aus mehreren Zeichengruppen besteht schadet im Allgemeinen nicht.
Wichtig ist, dass Du Dir die Regel, nach der eine Prüfung stattfindet vorher aufschreibst, im Kommentar zur Funktion dokumentierst. Wie Du diese Regel prüfst, das wiederum ist für die Anwendung der Prüfung selbst völlig gleichgültig - Hauptsache das Ergebnis ist gemäß Prüfrichtlinie korrekt.
Wenn Du also 78901 nicht als aufsteigend definierst, dann muss
bool function ist_aufsteigend($string)
false zurückliefern. Definierst Du 78901 als aufsteigend, dann eben true.
Nochmals:
1. Schritt: Definition der Prüfrichtlinie
2. Schritt: Dokumentation der Prüfrichtlinie
3. Schritt: Erstellen eines Testes für die Funktion
4. Schritt: Umsetzen in einen Algorithmus
5. Schritt: Testen der Funktion
Später kannst Du alternative Algorithmen (siehe z.B. die Varianten mit Array-Funktionen) durchtesten und ggf. ersetzen. Wichtig ist, dass die Funktion gemäß Spezifikation korrekt arbeitet. Wie sie das macht, ist zweitrangig.
Freundliche Grüße
Vinzenz