MudGuard: preg_match

Beitrag lesen

Hi,

Grüß Gott,

ich möchte gerne einen Benutzernamen auf Gültigkeit überprüfen. Als erstes Zeichen soll möglich sein: [a-z0-9äöü], gefolgt von einem Zeichen [a-z0-9äüöß.\s], und zum Schluß [a-z0-9äüöß]. Da das ganze aus mindestens 5 Zeichen bestehen soll, sollte folgender Ausdruck eigentlich klappen:

preg_match('#([a-z0-9äöü]+[a-z0-9äöüß.\s]+[a-z0-9äöüß]){5,50}#i', $Name)

Dein Name muß laut Ausdruck mindestens 15 und maximal unendlich lang sein.

Erklärung:

In der Klammer muß mindestens ein Zeichen aus [a-z0-9äöü], mindestens ein Zeichen aus [a-z0-9äöüß.\s] und genau ein Zeichen aus [a-z0-9äöüß] vorkommen, also mindestens 3 Zeichen in der Klammer.

Der Inhalt der Klammer muß 5 bis 50 mal vorkommen.

Macht also minimal 5 * 3 Zeichen = 15 Zeichen.

Da die Klammer aber auch auf beliebig mehr als 3 Zeichen matcht, ist keine Obergrenze vorhanden.

Ein weiterer Fehler im Ausdruck: Du verankerst ihn nicht an den Stringenden.
Also matcht auch ßßßabcabcabcabcabcßßß
denn das a paßt zur ersten eckigen Klammer, das b zur zweiten und das c zur dritten. Und das je 5 mal.

Entschuldigung, ich bekomme keine syntaktische Fehlermeldung, aber ich kann keinen Namen eingeben, der der o.g. Regel entspricht.

Weil das, was Du technisch als Regel angibst, nicht viel mit dem zu tun hat, was Du haben willst.

Prüfe die Länge getrennt vom Inhalt, per strlen (oder wie das in php heißt ...), verankere den Ausdruck.
Ich bin mir auch nicht sicher, ob das \s in der eckigen Klammer nicht einfach nur als s (oder als Backslash und als s) gewertet wird ...

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.