Ankündigung

Einklappen
Keine Ankündigung bisher.

Leerzeichen erkennen und Nutzer darauf hinweisen! (Nicht ersetzen)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Leerzeichen erkennen und Nutzer darauf hinweisen! (Nicht ersetzen)

    Hallo zusammen

    Ich war mir nicht ganz sicher, ob das eher eine Anfänger oder Fortgeschrittenen-Frage ist, deshalb bitte keine Kommentare hierzu.

    Also, Leerzeichen ersetzen ist kein Problem, allerdings möchte ich Ihm, z.B. wenn sein gewünschter Nutzername "Sepp +" lautet, folgende Fehlermeldung ausgeben "Ihr Benutzername darf nur aus Buchstaben, Zahlen und "_" bestehen, Leerzeichen sind nicht erlaubt!". Buchstaben, Zahlen und "_" sollten sich durch "(preg_match('/[a-zA-Z][0-9_-]/', $strings))" erkennen lassen, allerdings funktioniert das komischerweise gerade auch nicht mehr, aber nun zu meinem Hauptproblem. Ich will wissen, ob er ein Leerzeichen eingegeben hat und wenn ja, dann soll es nicht ersetzet werden, sondern der Nutzer auf den Fehler hingewiesen werden. Leider habe ich keinen Weg gefunden, wie ich das erreichen kann. Kann ich meinen preg_match irgendwie auf Leerzeichen ausweiten, ich brauche ja etwas, dass mir "true" oder "false" zurückliefert.

    Oder gibt es vielleicht sogar noch eine elegantere Lösung?

    Ich weiss es ist nicht besonders wichtig, aber ich arbeite gerade an einem "perfekten" Registrierungs-Script, das ich später als Vorlage verweden will.

    Mit freundlichen Grüssen

    sven_meye


  • #2
    PHP-Code:
    if(count(explode(' ',$string)) > 1) echo "Bitte verwenden Sie keine Leerzeichen"
    Nicht unbedingt elegant sollte aber funktionieren.

    Kommentar


    • #3
      Bei Eingabe von "Sepp +" soll nur auf das Leezeichen hingewiesen werden? Das + ist aber weder Buchstabe, noch Zahl , noch _. Du solltest genau festlegen, welche Zeichen du zulassen möchtest und dies mit einen Regex prüfen.
      Leerzeichen zu erkennen ist nicht dein Hauptproblem.
      PHP-Klassen auf github

      Kommentar


      • #4
        Buchstaben, Zahlen und "_" sollten sich durch "(preg_match('/[a-zA-Z][0-9_-]/', $strings))" erkennen lassen, allerdings funktioniert das komischerweise gerade auch nicht mehr
        Weil der Ausdruck nicht korrekt ist. Du suchst derzeit nach:
        Genau einem Zeichen aus der Menge [a-zA-Z] und danach/anschliessend genau einem Zeichen aus der Menge [0-9_-]

        "Sepp9" würde "p9" finden. Hier ein Test mit dem /g modifier: https://www.regex101.com/r/yX4vD1/1

        Übrigens:

        Ich war mir nicht ganz sicher, ob das eher eine Anfänger oder Fortgeschrittenen-Frage ist, deshalb bitte keine Kommentare hierzu.
        Nicht Fortgeschritten .. und ein Post reicht: http://www.php.de/php-einsteiger/113...tml#post833658

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Ich würde in erster Linie prüfen ob die Eingabe korrekt ist und da kommst du am besten indem du festlegst was der Nutzer eingeben darf. Zudem beachtest du auch nicht die Eingabe von Umlauten, bzw. lässt diese mit deinem Ausdruck auch nicht zu.

          Ist der Benutzername korrekt ist alles ok, wenn nicht und du willst dem Nutzer unbedingt zeigen welche falschen Zeichen er eingeben hat, dann würde ich das mit einem zweiten Regex dafür filtern und ihm dieses dann anzeigen.

          a-zA-Z kannst du dir mit Modifier i sparen.

          Hier kannst du nachlesen wie du auch Umlaute in deinen Regex zulassen würdest.

          Gruß Litter
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            Zitat von svenmeye
            Ich will wissen, ob er ein Leerzeichen eingegeben hat und wenn ja, dann soll es nicht ersetzet werden, sondern der Nutzer auf den Fehler hingewiesen werden. Leider habe ich keinen Weg gefunden, wie ich das erreichen kann.
            Es gibt da diese nahezu unbekannte Funktion namens strpos.

            Zitat von Spamversender
            Dein regex ist etwas fehlerhaft:
            /[a-zA-Z0-9_-]*/
            Alles in einen [] Bereich. Und einen quantoren. Ansonsten mal versuchen den - im Bereich eacapen
            (Aus dem anderen Thread.)

            Der neue reguläre Ausdruck matcht ganz genau… absolut jede Eingabe. Jede denkbare Eingabe enthält eine beliebige Anzahl (inklusive null) von Zeichen aus der Zeichenklasse.

            Besser:

            Code:
            $pattern = '/\A[A-Za-z0-9_]+\z/';
            Der Trennstrich "-" kann zudem in Zeichenklassen ganz am Ende und ganz am Anfang stehen, ohne eine syntaktische Bedeutung zu haben.

            Zitat von hausl
            Du suchst derzeit nach:
            Genau einem Zeichen aus der Menge [a-zA-Z] und danach/anschliessend genau einem Zeichen aus der Menge [0-9_-]
            …und zwar irgendwo in der Eingabe, weil das Pattern aus #1 nicht am Eingabeanfang und -ende verankert ist.

            Das heißt, was vor oder hinter dem Teilstring steht, der zu dem Pattern passt, wäre gleichgültig.

            Kommentar

            Lädt...
            X