Peter: preg_match

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

  1. 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.

    1. 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.
      1. Danke für die Hilfe!
        Aber was heißt das:

        Du verankerst ihn nicht an den Stringenden.?

        1. 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

          --
          X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
        2. hallo Peter,

          Aber was heißt das:

          Du verankerst ihn nicht an den Stringenden.?

          guckst du hier

          Du musst dem Regex sagen, von wo bis wo er suchen soll.

          /^von Anfang bis Ende$/
          (ohne Gewähr :P)

          grüße,
          henman

          --
          "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
          sh:( fo:| ch:? rl:° br:> n4:? ie:% mo:) va:| de:] zu:) fl:{ ss:| ls:[ js:|
          1. Danke. So gehts.

            if (!(preg_match('#(^[a-z0-9äöü]+[a-z0-9äöüß.-\s]+[a-z0-9äöüß]$)#i', $Name)) || strlen($Name) < 5 || strlen($Name) > 30)

  2. 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!

  3. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes