Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeichenerkennung mit preg_match

Einklappen

Neue Werbung 2019

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

  • Zeichenerkennung mit preg_match

    Hallo Liebe Forengemeinde,

    mein Name ist Lars und ich arbeite mich zur Zeit zurück in die Welt der Webentwicklung.

    Ich bin gerade dabei die Sicherheit eines Passwortes über Ajax während der Eingabe zu prüfen und vergebe für verschiedene Bestandteile wie kleine und Große Buchstaben, Zahlen und Sonderzeichen Punkte, die ich dann addiere und entsprechend ausgebe. Es funktioniert auch fast alles einwandfrei. Um das Passwort auf seine Bestandteile zu prüfen, nutze ich preg_match. Hierbei treten zwei Phänomene auf, bei denen ich euch um Hilfe bitten möchte.


    Mein Code / PHP Version 7.1.9 :


    PHP-Code:
        $password utf8_encode($_GET['q']);
        
    $saftypoints mb_strlen($password);
        if (
    preg_match("/[a-züöä]/"$password)) {
            
    $saftypoints += 5;
        }
        if (
    preg_match("/[A-ZÜÖÄ]/"$password)) {
            
    $saftypoints += 5;
        }
        if (
    preg_match("/[0-9]/"$password)) {
            
    $saftypoints += 5;
        }
        if (
    preg_match("/[,.-;:_!?]/"$password)) {
            
    $saftypoints += 5;
        } 
    Gebe ich eine Zahl ein erhalte ich 11 anstatt 6 Punkte. Nehme ich die vierte Abfrage der Sonderzeichen raus, erhalte ich 6 Punkte. Wo ist mein Fehler in der Abfrage der Sonderzeichen, dass eine Zahl hier als Treffer gewertet werden kann?

    Das Zweite Phänomen ist, dass egal ob ich kleine oder große Umlaute eingebe, ich ebenfalls jedesmal auf 12 Punkte komme, da in diesem Falle die ersten beiden Abfragen einen Treffer angeben und die mb_strlen Umlaute als 2 Zeichen erkennt. Wie kann man mit Umlauten verfahren, damit er hier die Groß- und Kleinschreibung unterscheiden kann und die Stringlänge (aus Menschensicht) richtig gewertet wird?

    ich danke euch im Voraus.

  • #2
    PHP-Code:
    if (preg_match("/[,.-;:_!?]/"$password)) 
    Der Punkt matched ein beliebiges Zeichen.

    Den Punkt mit \ escapen.

    Grüße.

    Kommentar


    • #3
      PHP-Code:
      if (preg_match("/[" preg_quote(",.-;:_!?") . "]/"$password)) { 
      Und das utf8_encode() ist Quatsch. Wozu verwendest du das?

      Kommentar


      • #4
        Danke erst einmal für die Hilfe bei den Sonderzeichen. Funktioniert jetzt. Manchmal kann es so einfach sein

        Mit dem utf8_encode() habe ich gehofft das Problem mit den Umlauten lösen zu können. Ohne das encode erkennt mb_strlen die Umlaute zumindest als ein Zeichen. strlen weiterhin als zwei. Und die ersten Beiden Abfragen matchen auch weiterhin jedes Umlaut egal ob groß oder klein.

        Kommentar


        • #5
          Lesetipp: UTF-8 und die seltsamen Zeichen

          Kommentar


          • #6
            Danke, das erklärt, warum die Länge unter uft8 zwei Zeichen beträgt.

            Wieso kann preg_match kleine und große Sondernzeichen in meinem Fall nicht unterscheiden?

            Kommentar


            • #7
              Dir fehlt da der Modifikator u für UTF-8 Zeichen.

              PHP-Code:
               if (preg_match("/[a-züöä]/u"$password)) { 

              Kommentar


              • #8
                Zitat von php1704 Beitrag anzeigen
                Der Punkt matched ein beliebiges Zeichen.
                Nein das tut er nicht innerhalb einer Zeichengruppe. Beispiel => https://eval.in/private/504c6dffa62e5c

                Allerdings gehört der Bindestrich innerhalb einer Zeichngruppe (wenn er ein einzelnes Zeichen darstellen soll) immer ans Ende weil Sonst alle Zeichen von . bis ; zutreffen und - nur wenn es dazwischen liegt

                Kommentar


                • #9
                  Viele lieben Dank euch allen!

                  Es funktioniert. Und beide Lösungsansätze haben geholfen, sowohl preq_quote als auch den Bindestrich an das Ende zu setzen. Danke auch für den Hinweis, dass der Punkt innerhalb von Zeichenketten nicht jedes Zeichen durch lässt.

                  Kommentar


                  • #10
                    Zitat von Amarok Beitrag anzeigen
                    Danke auch für den Hinweis, dass der Punkt innerhalb von Zeichenketten nicht jedes Zeichen durch lässt.
                    Wenn Du im Zitierten Satz "Zeichenkette" durch "Zeichengruppe" ersetzt dann stimmt es. Sonst ist die Aussage falsch.

                    Kommentar


                    • #11
                      Die Passwortstärke bei der Eingabe zu ermitteln und anzuzeigen erfolgt üblicherweise komplett mit Javascript ohne PHP durch ständige Ajax-Requsts zu bemühen.

                      Kommentar


                      • #12
                        Weils übrigens thematisch passt:

                        https://futurezone.at/digital-life/n...rk/279.679.264

                        Kommentar


                        • #13
                          Das ist sicherlich richtig. Ich lerne auch nur.. und wollte die Kommunikation von Ajax und PHP mal ausprobieren. Ich möchte im nächsten Step darüber Datenbank life Durchsuchungen realisieren.. also wie bei Google, dass gewisse Vervollständigungen vorgeschlagen werden anhand dessen, was in der Datenbank vorhanden ist.

                          Kommentar


                          • #14
                            Super Artikel, hellbringer ! Wenn neben solchen Regeln dann noch Einschränkungen (z.B. keine Umlaute oder bestimmte Sonderzeichen nicht) dazukommen, kann dies einen schon den Verstand rauben...

                            Kommentar

                            Lädt...
                            X