Heiko: PHP - 'preg_match' Funktion

Hallöchen,
ich habe da mal wieder ein kleines Problem. Ich kann beim besten willen die 'preg_match' Funktion einfach nicht verstehen.
Das Problem:
Ein Eingabefeld User soll als erstes Zeichen ein Buchstaben haben, zwischen 3 und 25 Zeichen. Erlaubte Zeichen a-zA-Z0-9 sowie den unterstrich und Bindestrich (_-). Könnte mir einer bitte helfen?

Vielen Dank im Voraus Heiko

  1. Moin!

    Das Problem:
    Ein Eingabefeld User soll als erstes Zeichen ein Buchstaben haben, zwischen 3 und 25 Zeichen. Erlaubte Zeichen a-zA-Z0-9 sowie den unterstrich und Bindestrich (_-). Könnte mir einer bitte helfen?

    Was hast du schon probiert? Was war dabei das Ergebnis? Es ist erfahrungsgemäß immer lehrreicher für dich, wenn du deine eigenen Überlegungen konkret in Code gießt, den Mißerfolg siehst, und dich dann korrigieren läßt, anstatt hier Pauschallösungen abzufragen. Denn beim nächsten Mal machst du den hier korrigierten Fehler nicht nochmal, während eine Fertiglösung dich nur wenig lehrt.

    - Sven Rautenberg

    1. Moin Sven
      Also ich habe da zwei Zeilen die sich aber gegenseitig 'beißen'.

      if(!preg_match("/[a-zA-Z]{1}/", $_POST['username'])) $FehlerNr = 1;
      Hier wird aber nur der erste Buchsabe geprüft und nicht die restlichen Zeichen.

      if(!ereg("^[a-zA-Z0-9_-]{3,100}$", $_POST['username'])) $FehlerNr = 1;
      Hier ist es möglich ein Name wie z. Bsp. 123Teoleo einzugeben.

      LG Heiko

      1. Hi,

        if(!preg_match("/[a-zA-Z]{1}/", $_POST['username'])) $FehlerNr = 1;
        Hier wird aber nur der erste Buchsabe geprüft und nicht die restlichen Zeichen.

        Nein, hier wird überprüft, ob ein beliebiges Zeichen ein Buchstabe ist.
        {1} kannst Du weglassen.

        Wenn Du das 1. Zeichen überprüfen willst, mußt Du den Regex am Stringanfang verankern mit ^ (so wie Du es im nächsten Ausdruck gemacht hast).

        if(!ereg("^[a-zA-Z0-9_-]{3,100}$", $_POST['username'])) $FehlerNr = 1;

        Warum nutzt Du hier ereg? Das Zeug ist veraltet, soll demnächst aus PHP entsorgt werden ...

        Hier ist es möglich ein Name wie z. Bsp. 123Teoleo einzugeben.

        Natürlich - die 1. Prüfung schlägt z.B. auf das T an, die zweite Prüfung erlaubt Ziffern auch an Position 1.

        Du willst aber: 1. Zeichen [a-zA-Z], danach 2 bis 24 mal [a-zA-Z0-9_-] (zumindest laut erstem Posting, hier hast Du 100 statt 25 Zeichen erlaubt).

        Also:
        /[1][a-zA-Z0-9_-]{2,24}$/

        cu,
        Andreas

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

        1. a-zA-Z ↩︎