PHP Regulärer Ausdruck?

HansDampf38

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
381
Hallo,
ich habe hier einen regulären Ausdruck der auch macht was er soll, nur will ich auch wissen wieso... das stand bei der Quelle leider nicht dabei:

Geht um Benutzernamen

preg_match("/^[a-z0-9]+([\\s]{1}[a-z0-9]|[a-z0-9])+$/i", $test))

Der Anfang ist klar, mir geht es nur um den hinteren Teil. Wieso steht da

[a-z0-9]|[a-z0-9]
Kleinbuchstaben und Zahlen sind erlaubt ODER Kleinbuchstaben und Zahlen sind erlaubt
(dass das i am Ende bedeutet das auch Großbuchstaben erlaubt sind ist mir klar)

Wenn ich eins davon wegnehme klappt es nicht, also drin sein muss es, aber wieso ?

Gruß

HD
 
AW: Regulärer Ausdruck ?

Zum ersten gehört aber auch noch \s, also kann davor ein {1} Leerzeichen/Tab/Zeilenumbruch stehen.
 
AW: Regulärer Ausdruck ?

Hallo,
das ist mir ja klar.

Also hier noch einmal wie ich das lese:

"/^[a-z0-9]+([\\s]{1}[a-z0-9]|[a-z0-9])+$/i"

- am Anfang dürfen beliebig viele Buchstaben oder Zahlen kommen ^[a-z0-9]
- dann darf max. 1 Leerzeichen kommen [\\s]{1}
- dann dürfen wieder beliebig viele Buchstaben und Zahlen kommen [a-z0-9]

und hier kommt der Knackpunkt
- oder wieder beliebig viele Buchstaben und Zahlen kommen |[a-z0-9]

Wo ist also mein Denkfehler ?

Gruß

HD
 
AW: Regulärer Ausdruck ?

http://regexp.uli-staerk.de/

Kannste n bissl rumspielen und bekommst vielleichtn gefühl was es macht. Wichtig ist der | dieser sagt
Code:
\s[a-z0-9] ODER [a-z0-9]

Wäre identisch zu
Code:
/^[a-z0-9]+(\s?[a-z0-9])+$/i

das + am schluss macht irgendwie wenig sinn oder ich habs auf anhieb auch net verstanden
 
Zuletzt bearbeitet:
Ist doch ganz einfach :-)

Wie schon gesagt beginnt die Zeichenkette mit Buchstaben oder Zahlen und zwar genau einem Wert oder unendlich vielen - beliebig viele wäre der Modifier * (= 0 bis unendlich), + ist 1 bis unendlich.
/^[a-z0-9]+

/i sagt, dass die Gross-/Kleinschreibung im ganzen String egal ist. D.h. "pEtER muSter" geht auch.

Nun: ([\\s]{1}[a-z0-9]|[a-z0-9])+$
Die Zeichenkette endet mit Buchstaben oder Zahlen (in jedem Fall). Davor darf im ersten Fall genau ein Leerzeichen stehen. Das + sagt wieder 1 oder mehrere.
D.h. man schreibt ein Leerzeichen gefolgt von einem Buchstaben / Zahl (im ersten Fall): " x"; nur Buchstaben / Zahl (im zweiten Fall): "x", kann dann aber im nächsten Durchlauf wieder ein Leerzeichen anhängen oder nur einen Buchstaben / Zahl: " x y" oder " xy"

Durch das + ist die letzte Klammer wie eine Schleife zu verstehen:
"a" + " b" + "8" + " c" + " 2" + "z" (achte auf die Leerzeichen)

Verständlich?
 
Zuletzt bearbeitet:
Hallo,
glaube ich habs verstanden.

Ich kann also als Benutzernamen nicht nur

Hans Dampf

nehmen, sondern auch

Hans Dampf Klaus Maus .... usw.

Gut, habe auch gerade rausgefunden, was mein weiterer Fehler war. Ich darf das Zweite nicht einfach löschen. Wenn ich nur EINEN Vor- und Nachnamen will, muss das + mit in die Klammer.

Danke

HD
 
Zurück
Oben