Markus Klein: String auf numerisch und alphanumerisch überprüfen

Hallo zusammen,

ich bin kein JS-Spezialist und trau mich nur ansatzweise an das Problem heran.
Ich soll bei einer Passworteingabe überprüfen, ob das eingegebene Passwort mind. 6 Zeichen lang ist und ob mind. 1 numerischer und mind. 1 alphanumerischer Wert enthalten ist, also zB:
abc1def

Wie kann ich dies mit JS überprüfen?

fg
Markus Klein

  1. Hallo Markus.

    Ich soll bei einer Passworteingabe überprüfen, ob das eingegebene Passwort mind. 6 Zeichen lang ist

    Dafür kannst du die Länge deiner Variable prüfen, welche die Eingabe enhält.

    und ob mind. 1 numerischer und mind. 1 alphanumerischer Wert enthalten ist,

    Hierfür wirst du dich wohl eines regulären Ausdruckes bedienen müssen:

    Geeignete Funktion zum Testen: test()

    RegEx: JS-RegEx

    BTW: Du weißt, warum es alpha*numerisch* heißt?

    Einen schönen Donnerstag noch.

    Gruß, Ash*feel free*ura

    --
    Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Fix dsl sbc yahoo com with User JavaScript
    Meine Browser: Opera 8.50 | Firefox 1.0.7 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
    Use OpenOffice.org
    1. He, nicht vorsagen!

      Live long and prosper,
      Gunnar

      --
      „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    2. Hallo,

      ich habe es jetzt mal mit test() versucht und bin gleich kläglich gescheitert.
      Damit 4 als richtig erkannt wird müsste es ja so aussehen, oder:

      <script language="JavaScript" type="text/javascript" >
      var derSatz = "4";
      var Suche = /\d./;
      var Ergebnis = Suche.test(derSatz);
      if (Ergebnis == false) {
         document.write("nichts gefunden");
      }
      else {
       document.write("gefunden");
      }
      </script>

      Aber es funktioniert leider nicht.
      Was mache ich falsch.

      Hier müsste ich gefunden zurückbekommen, aber ich bekomme immer wieder "nichts gefunden" zurück, warum?

      fg
      Markus

      1. Markus,

        var Suche = /\d./;

        sucht nach einer Ziffer gefolgt von einem beliebigen Zeichen; passt also nicht auf "4".

        if (Ergebnis == false)

        Der Vergleich gegen false
        ist unnötig: if (!Ergebnis)

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      2. Hallo, sorry hab wohl etwas zu schnell geschossen.
        Die Lösung für die Suche ob eine Zahl in dem String enthalten ist, lautet:
        <script language="JavaScript" type="text/javascript" >
        var derSatz = "abcdefgh3";
        var Suche = /\d/;
        var Ergebnis = Suche.test(derSatz);
        if (Ergebnis == false) {
           document.write("nichts gefunden");
        }
        else {
         document.write("gefunden");
        }
        </script>

        UND ich meinte mit alphanumerisch eigentlich alphabetisch.
        Wie kann ich nun mit regex herausfinden, ob auch ein Buchstabe vorhanden  ist?

        fg
        Markus

        1. <script language="JavaScript" type="text/javascript" >

          Das language-Attribut kommt in den Müll.

          Wie kann ich nun mit regex herausfinden, ob auch ein Buchstabe vorhanden  ist?

          Markus,
          Du hast in [http://de.selfhtml.org/javascript/objekte/regexp.htm] das überlesen:

          \w  findet alle alphanumerischen Zeichen und den Unterstrich (typische Bedingung etwa für programmiersprachengerechte selbstvergebene Namen).

          Wenn du _ nicht haben willst: [A-Za-z]\

          Für Passwörter kann es auch sinnvoll sein, Groß- und Kleinbuchstaben getrennt abzu fragen: [A-Z]\ und [a-z].

          Live long and prosper,
          Gunnar

          --
          „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
          1. Hallo Gunnar,

            ah so funktioniert dies also:
            /\w.+[A-Za-z]/
            Dies ist aber nirgends zu lesen und ich bin jetzt auch nur durch oftmaliges probieren hingekommen.
            Warum ist dies nicht besser dokumentiert?
            Gibt es da eine bessere Doku zu Regex?
            Bzgl. [] steht ja nirgendswo was?

            fg
            Markus

            1. Hallo Markus.

              ah so funktioniert dies also:
              /\w.+[A-Za-z]/

              Nein, tut es nicht.
              Dort steht:

              \w - Ein beliebiges alphanumerisches Zeichen und „_“
                    .+ - Ein beliebiges Zeichen, mindestens ein Mal
              [A-Za-z] - Ein Zeichen von A-Z bzw. a-z.

              Dass diese RegEx in jedem Fall funktioniert, ist daher nicht weiter verwunderlich.

              Dies ist aber nirgends zu lesen und ich bin jetzt auch nur durch oftmaliges probieren hingekommen.

              Probiere weiter.

              Warum ist dies nicht besser dokumentiert?

              Es heißt *Self*HTML

              Gibt es da eine bessere Doku zu Regex?

              IMHO ja: PCRE Evaluator: » Was sind RegExp? « (Wobei dies schon eher Richtung PHP/Perl geht.)

              Bzgl. [] steht ja nirgendswo was?

              Siehe oben. Damit definierst du eine Zeichenklasse.

              Einen schönen Donnerstag noch.

              Gruß, Ash*feel free*ura

              --
              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Fix dsl sbc yahoo com with User JavaScript
              Meine Browser: Opera 8.50 | Firefox 1.0.7 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
              Use OpenOffice.org
              1. Hallo,

                ah so funktioniert dies also:
                /\w.+[A-Za-z]/

                Nein, tut es nicht.
                Dort steht:

                \w - Ein beliebiges alphanumerisches Zeichen und „_“
                      .+ - Ein beliebiges Zeichen, mindestens ein Mal
                [A-Za-z] - Ein Zeichen von A-Z bzw. a-z.

                Dass diese RegEx in jedem Fall funktioniert, ist daher nicht weiter verwunderlich.

                Dies ist aber nirgends zu lesen und ich bin jetzt auch nur durch oftmaliges probieren hingekommen.

                Probiere weiter.

                Ok, hab ich gemacht:
                /[A-Za-z]\w/
                Ist die Lösung, oder?

                Hab ich aber auf:
                http://pcre.nophia.de/explain/backslash/index.php
                gefunden.

                fg
                Markus

                1. /[A-Za-z]\w/
                  Ist die Lösung, oder?

                  Ist "a1a1a1" ein gültiges Passwort?

                  Live long and prosper,
                  Gunnar

                  --
                  „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
                  1. Hallo,

                    Ist "a1a1a1" ein gültiges Passwort?

                    Ja, warum?

                    Mit dieser RegEx will ich nur nachsehen ob ein Buschstabe in dem String ist.
                    Stimmt es so, oder nicht?
                    <script type="text/javascript">
                    var derSatz = "786a8887";
                    var Suche = /[A-Za-z]\w/;
                    var Ergebnis = Suche.test(derSatz);
                    if (Ergebnis == false) {
                       document.write("nichts gefunden");
                    }
                    else {
                     document.write("gefunden");
                    }
                    </script>

                    fg
                    Markus

                    1. Ist "a1a1a1" ein gültiges Passwort?

                      Ja, warum?

                      Was sagt denn dann dein Script dazu?

                      var derSatz = "a1a1a1";  
                      var Suche = /[A-Za-z]\w/;  
                      var Ergebnis = Suche.test(derSatz);  
                      if (Ergebnis == false) {  
                         document.write("nichts gefunden");  
                      }  
                      else {  
                       document.write("gefunden");  
                      }
                      

                      Live long and prosper,
                      Gunnar

                      --
                      „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
                      1. Hallo,

                        Was sagt denn dann dein Script dazu?

                        na gefunden sagt es, was ja auch stimmt.
                        Wenn noch was nicht stimmt, dann sag es mir doch einfach, oder willst du nicht?
                        Wie gehört den jetzt die Regex?

                        fg
                        Markus

                        1. Markus,
                          Sorry, mein Denkfehler. Grad hatte ich noch zitiert, was \w bedeutet, einen Wimpernschlag später dachte ich, Ziffern gehören nicht dazu.

                          Was nicht heißt, dass dein regulärer Ausdruck stimmt: überprüfe "12345a".

                          Du wolltest doch nur ein Zeichen finden, warum suchst du nach zwei aufeinanderfolgenden: [A-Za-z] und \w?

                          Ich würd die Variablen auch anders nennen:

                            
                          var passwort = "foo";  
                          var Buchstabe = /[A-Za-z]/;  
                          var enthaeltBuchstabe = Buchstabe.test(passwort);  
                          if (!enthaeltBuchstabe) {  
                            document.write("nichts gefunden");  
                          }  
                          else {  
                            document.write("gefunden");  
                          }  
                          
                          

                          Wenn du auch Umlaute zulassen willst, musst du die mit in die eckigen Klammern tun (große und kleine).

                          Live long and prosper,
                          Gunnar

                          --
                          „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
                        2. Hallo,

                          na das hättet ihr auch gleich sagen können, dass es so funktioniert:
                          var derSatz = "1231231";
                          var Suche = /[A-Za-z]/;
                          var Ergebnis = Suche.test(derSatz);
                          if (Ergebnis == false) {
                             document.write("nichts gefunden");
                          }
                          else {
                           document.write("gefunden");
                          }

                          fg
                          Markus

                          1. na das hättet ihr auch gleich sagen können, dass es so funktioniert:

                            Markus,
                            Hätten wir. Aber beim Selbstfinden der Lösung lernt man am meisten. Und behält es länger im Gedächtnis.

                            Live long and prosper,
                            Gunnar

                            --
                            „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
                            1. Hallo,

                              na das hättet ihr auch gleich sagen können, dass es so funktioniert:

                              Markus,
                              Hätten wir. Aber beim Selbstfinden der Lösung lernt man am meisten. Und behält es länger im Gedächtnis.

                              Ja eh, aber ich war echt schon sehr "angfressen", weil ich echt schon lange "herumgeschissen" habe, aber zum Glück ist es ja doch noch was geworden.

                              dank euch

                              fg
                              Markus

            2. Warum ist dies nicht besser dokumentiert?
              Gibt es da eine bessere Doku zu Regex?

              In SELFHTML: http://de.selfhtml.org/perl/sprache/regexpr.htm (ein Link dorthin ist  auch auf http://de.selfhtml.org/javascript/objekte/regexp.htm)

              Das PERL-Spezifische dort kannste überlesen; die regulären Ausdrücke dürften in JavaScript genauso sein.

              Live long and prosper,
              Gunnar

              --
              „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
  2. Ich soll bei einer Passworteingabe überprüfen, ob das eingegebene Passwort mind. 6 Zeichen lang ist und ob mind. 1 numerischer und mind. 1 alphanumerischer Wert enthalten ist, also zB:

    Markus,
    Schau doch mal, was das http://de.selfhtml.org/javascript/objekte/string.htm@title=String-Objekt so bietet. http://de.selfhtml.org/javascript/objekte/string.htm#length@title=lenght dürfte dich interessieren.

    Zum Test auf Ziffern und Buchstaben bietet sich die Methode http://de.selfhtml.org/javascript/objekte/regexp.htm#test@title=test() des http://de.selfhtml.org/javascript/objekte/regexp.htm@title=RegExp-Objektes an.

    Dann noch etwas http://de.selfhtml.org/javascript/sprache/bedingt.htm@title=if und eine Prise http://de.selfhtml.org/javascript/sprache/operatoren.htm#logisch@title=&& dazugeben … fertig ist die Soße.

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hallo Gunnar.

      Schau doch mal, was das http://de.selfhtml.org/javascript/objekte/string.htm@title=String-Objekt so bietet. http://de.selfhtml.org/javascript/objekte/string.htm#length@title=lenght dürfte dich interessieren.

      Zum Test auf Ziffern und Buchstaben bietet sich die Methode http://de.selfhtml.org/javascript/objekte/regexp.htm#test@title=test() des http://de.selfhtml.org/javascript/objekte/regexp.htm@title=RegExp-Objektes an.

      Erstaunlich... (Wann hast du angefangen zu tippen?)

      Einen schönen Donnerstag noch.

      Gruß, Ash*feel free*ura

      --
      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Fix dsl sbc yahoo com with User JavaScript
      Meine Browser: Opera 8.50 | Firefox 1.0.7 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
      Use OpenOffice.org
      1. Erstaunlich... (Wann hast du angefangen zu tippen?)

        Äh…, jedenfalls bin ich nach dir fertig geworden. Was natürlich an meinen zusätzlichen Hinweisen zu if und && lag. ;-)

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. Hallo Gunnar.

          Erstaunlich... (Wann hast du angefangen zu tippen?)

          Äh…, jedenfalls bin ich nach dir fertig geworden.

          Nicht ausweichen!

          Was natürlich an meinen zusätzlichen Hinweisen zu if und && lag. ;-)

          Ja, berechtigte Hinweise.

          Einen schönen Donnerstag noch.

          Gruß, Ash*feel free*ura

          --
          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Fix dsl sbc yahoo com with User JavaScript
          Meine Browser: Opera 8.50 | Firefox 1.0.7 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
          Use OpenOffice.org
  3. Markus,
    Wie sieht deine Lösung jetzt aus?

    Meine ist http://gunnarbittersmann.de/2005/passwordchecker-20051006.html

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)