preg_match
Peter
- php
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)
Es tut aber nicht. Ich kriege immer eine Fehlermeldung. Kann
mir einer von euch sagen warum?
Vielen Dank und viele Grüße,
Peter
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)
Es tut aber nicht. Ich kriege immer eine Fehlermeldung. Kann
mir einer von euch sagen warum?Vielen Dank und viele Grüße,
Peter
Entschuldigung, ich bekomme keine syntaktische Fehlermeldung, aber ich kann keinen Namen eingeben, der der o.g. Regel entspricht.
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
Danke für die Hilfe!
Aber was heißt das:
Du verankerst ihn nicht an den Stringenden.?
Hi,
Aber was heißt das:
Du verankerst ihn nicht an den Stringenden.?
das heißt, dass Du nicht "der String muss von Anfang bis Ende diesem Muster entsprechen" schreibst, sondern "der String muss an mindestens einer Stelle diesem Muster entsprechen". Davor und danach ist absolut alles erlaubt.
Cheatah
hallo Peter,
Aber was heißt das:
Du verankerst ihn nicht an den Stringenden.?
Du musst dem Regex sagen, von wo bis wo er suchen soll.
/^von Anfang bis Ende$/
(ohne Gewähr :P)
grüße,
henman
Danke. So gehts.
if (!(preg_match('#(^[a-z0-9äöü]+[a-z0-9äöüß.-\s]+[a-z0-9äöüß]$)#i', $Name)) || strlen($Name) < 5 || strlen($Name) > 30)
Hi!
preg_match('#([a-z0-9äöü]+[a-z0-9äöüß.\s]+[a-z0-9äöüß]){5,50}#i', $Name)
{5,50} bezieht sich auf das vorangehende Zeichen oder wie in deinem Fall auf die Gruppe. Das heißt also, dass die Gruppe mindestens 5× vorhanden sein muss, mithin also mindestens 15 Zeichen. Du solltest die Wiederholung in die Mitte nehmen (und jeweils 2 abziehen).
Lo!
Hi,
Grüß Gott,
gerne: Ach Gott, schönen Gruß von Peter!
Es tut aber nicht. Ich kriege immer eine Fehlermeldung.
Welche denn? "Achtung, der Untergang der Menschheit steht unmittelbar bevor"?
Kann mir einer von euch sagen warum?
Nein, über die aktuellen Gründe zum bevorstehenden Untergang der Menschheit bin ich nicht informiert. Aber vielleicht verrät es mir ja Gott, wenn ich mit ihm ins Gespräch komme. Oder war es vielleicht doch eine andere Fehlermeldung?
Cheatah