janw72: Regex gesucht

Hi!

Ich möchte ein Zeichenkette darauf testen, dass

  • sie nur Buchstaben und Ziffern enthält
  • mindestens eine Ziffer enthält
  • mindestens einen Großbuchstaben enthält
  • mindestens 8 Zeichen lang ist

Ich habe das hier: ^(?=.*[A-Z])(?=.*\d).{8,}$

Dies klappt fast. Es ist die Eingabe von Leerzeichen möglich und es wird auch nicht geprüft, dass mindestens ein Großbuchstabe drin ist.

Geht das überhaupt alles in einer RegEx abzubilden? Oder sollte man das lieber aufsplitten in mehrere Abfragen?

Danke,
Jan

  1. Du willst doch nicht irgend eine schwachsinnige Passwortprüfroutine schreiben?

    1. Du willst doch nicht irgend eine schwachsinnige Passwortprüfroutine schreiben?

      Geht das denn nicht mit einer Regex?
      Weil du meinst, das wäre "schwachsinnig"!?

      Grüße!

      1. Du willst doch nicht irgend eine schwachsinnige Passwortprüfroutine schreiben?

        Geht das denn nicht mit einer Regex?

        Man kan mit Regulären Ausdrücken so ziemlich alle Muster abbilden, zielführend ist das aber oft nicht. In diesem Fall ist es aber recht einfach, aber bei der definierten Zeichenmenge kaum noch lesbar bzw. ohne kommenater nicht wirklich verständlich, was das soll - besonders wenn man das Ansinnen selbst nicht versteht (siehe "Schwachsinn"):

        [1]*(?=[A-Za-z0-9]{8,})(?=[A-Za-z0-9]*[0-9])(?=[A-Za-z0-9]*[a-z])(?=[A-Za-z0-9]*[A-Z])[A-Za-z0-9]*$

        [ich hab jetzt versucht das in verständliche Worte zu fassen, aber das klappt nicht :)]

        Oberflächlich getestet.

        Weil du meinst, das wäre "schwachsinnig"!?

        Ich bezog mich damit nicht auf den Lösungsansatz sondern auf das Ansinnen allgemein - ich nehme an, dass es sich tatsächlich um eine Passwortprüfung handelt:

        Was versprichst du dir davon, wenn du die Anzahl der möglichen Zeichenketten auf ein "sehr kleines" Set möglicher Passwörter beschränkst? (62 Zeichen als Vorrat sind wenig) und dieses dann noch künstlich einschränkst?

        Einerseits verhindert es nicht, dass deine benutzer Dumme Passwörter wählen und andererseits erreicht es erfolgreich, dass die Passworter leicht per Brute-Force angegriffen werden können, da der Zeichenvorrat und die Regeln exakt definiert sind.

        Es wird sogar vermehrt dazu führen, dass die Benutzer _exakt_ 8 Zeichen wählen, nur um das Limit zu erfüllen (sprich ein einfaches Passwort einfach nur um ein paar zeichen ergänzen, dass es passt).

        Du musst Benutzer nicht vor sich selbst schützen sondern du musst dafür sorgen, dass du nicht verantworlich bist, wenn die Daten verloren gehen.

        Dazu musst du den Datenbestand absichern und das Passwort nicht im Klartext speichern (Stichwort: Streuwert)

        Es ist aber nicht deine Aufgabe zu verhindern, dass jemand als Passwort "asdf" wählt (sofern du nicht grade ein Atomkraftwerk absicherst :p)


        1. A-Za-z0-9 ↩︎

        1. Vielen Dank für deine Worte!

          Werde ich mir durch den Kopf gehen lassen und mal schauen, wie ich ein Atomkraftwerk sicher bekomme :)

          1. مرحبا

            wie ich ein Atomkraftwerk sicher bekomme :)

            Nukular, dass Wort heisst Nukular.

            mfg

  2. Hi,

    Ich habe das hier: ^(?=.*[A-Z])(?=.*\d).{8,}$

    Es ist die Eingabe von Leerzeichen möglich

    wundert Dich das? . steht doch für "beliebiges Zeichen", und das Leerzeichen ist ein "beliebiges Zeichen".

    und es wird auch nicht geprüft, dass mindestens ein Großbuchstabe drin ist.

    Doch. Oder hast Du den Regex etwa case-insensitive gemacht?

    cu,
    Andreas

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