Badboy46: String überprüfen

Hallo,

ich möchte ein String überprüfen
Bedingung ist... er muss eine Zahl und ein Buchstaben enthalten

bis jetzt hab ich das mit zwei ereg Anweisungen gelöst
gibt es eine andere Möglichkeit, womit man das schöner lösen kann?

  1. ich möchte ein String überprüfen
    Bedingung ist... er muss eine Zahl und ein Buchstaben enthalten

    /[0-9][a-z]|[a-z][0-9]/i oder besser die Abkürzung /\d\w|\w\d/ (letzteres Perl-kompatibel, keine Ahnung, ob das mit POSIX geht).

    Gruß,
      soenk.e

  2. Huhu Badboy46

    bis jetzt hab ich das mit zwei ereg Anweisungen gelöst
    gibt es eine andere Möglichkeit, womit man das schöner lösen kann?

    Vielleicht mit nur einer "ereg Anweisung" resp. einem regulären Ausdruck?

    Wobei zwei Anweisungen nicht zwangsläufig schlechter als eine sein müssen.

    Das macht die Sache doch eigentlich ziemlich transparent wenn man
    z.B. folgendes hat

    $success = (preg_match('#[a-z]#i', $s) && preg_match('#\d#', $s));

    Um das in einen Ausdruck zu quetschen müsste man ja etwas wie folgt formulieren

    $success = preg_match('#([a-z]\d)|(\d[a-z])#i', $s);

    Da man ja nicht weiß ob erst ein Buchstabe und dann eine Zahl oder umgekehrt vorkommen.

    Das zweite Beispiel dürfte bei einem Performance-Test deutlich schlechter als das erste abschneiden.

    Und wenn jetzt z.B. noch auf ein Sonderzeichen geprüft werden soll (ich vermute mal es geht hier um Passwörter) ist das im ersten Fall schnell ergänzt ohne das die Übersichtlichkeit leidet.
    Im zweiten Beispiel fängt das dann an "murxig" zu werden.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo lulu,

      ich hab das so probiert

      $check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;

      da bekomme ich diese Fehlermeldung :-(
      Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62

      1. Huhu BadBoy

        $check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;

        da bekomme ich diese Fehlermeldung :-(
        Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62

        Ah, ein kniffliger Fehler ....

        die Zeichenklasse [a-Z] ist es, mit [a-z] klappt es.

        True und false brauchst Du in diesem Fall aber nicht extra zuweisen.
        Durch die logische UND-Verknüpfung gibt der Ausdruck auch so entweder true, oder false zurück.
        Die Klammern und das + brauchst Du nicht, wobei es nichts schadet, aber Du wolltest ja etwas schönes ;-)

        Beachte das Du eregi benutzen musst wenn case insensitve gematched werden soll.

        Also das hier sollte es tun

        $check = ereg('[0-9]', $password) && eregi('[a-z]', $password);

        Gute Nacht und viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. Hallo lulu,

          $check = ereg('[0-9]', $password) && eregi('[a-z]', $password);

          funktioniert jetzt soweit...
          diese Funktion gibt mir jetzt true, wenn eine Ziffer und ein Buchstabe enthalten ist...
          ich bräcuhte dann aber ein false, wenn eins davon nicht zutrifft ein true

          ist das der richtige Lösungsansatz?

          $check = !ereg('[0-9]', $password) || !eregi('[a-z]', $password);

          so funktioniert es, ist nur bissel verwirrend wegen den "||"

      2. Hallo,

        $check = ereg('([0-9]+)', $password) && ereg('([a-Z]+)', $password) ? true:false;

        verwende besser die preg_*-Funktionen (hier: preg_match) - die sind mächtiger und afaik auch schneller (->http://de.php.net/ref.pcre)

        da bekomme ich diese Fehlermeldung :-(
        Warning: ereg(): REG_ERANGE in /home/xxx/www.xxx.de/auth/_lib/function.php on line 62

        "REG_ERANGE" kommt auf php.net nicht vor, aber eine Googlesuche lässt mich vermuten, dass dieser Fehlercode auftaucht wenn man in einem regulären Ausdruck einen ungültigen Bereich angegeben hat (in deinem Fall ist a-Z (kleines A aber großes Z) falsch - versuch es mal mit '[a-z]' (oder wenn du auch Großbuchstaben finden willst mit '[a-zA-Z]').

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo Tobias,

          ich wusse nicht, dass preg_* schneller ist
          ich dachte, dass die Funktion bzgl. der regülären Ausdrucke etwas langsamer ist

          kann man eigentlich davon ausgehen, dass Provider regex unterstützen?
          Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?

          bzgl. a-Z
          irgendwie hab ich in Erinnerung, dass ich das so schon mal verwendet habe, kann mich aber auch irren ;-)

          1. Hallo,

            kann man eigentlich davon ausgehen, dass Provider regex unterstützen?

            wenn er eine halbwegs aktuelle Version einsetzt imho ja.

            Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?

            ich weiß es nicht, kann mir es aber nicht vorstellen - probier es doch einfach mal aus, merh als nicht funktionieren kann es doch nicht :-)

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            1. Hallo

              Oder gibt es einige Provider die PHP mit "--without-pcre-regex" kompilieren?
              ich weiß es nicht, kann mir es aber nicht vorstellen - probier es doch einfach mal aus, merh als nicht funktionieren kann es doch nicht :-)

              bei mir funktioniert es auf jedenfall ;-)
              nur wenn ich mein Script anderen zur Verfügung stelle, sieht das ziemlich schlecht aus, wenn es dann Fehlermeldungen hagelt ;-)

              Kay

              1. Hello,

                bei mir funktioniert es auf jedenfall ;-)
                nur wenn ich mein Script anderen zur Verfügung stelle, sieht das ziemlich schlecht aus, wenn es dann Fehlermeldungen hagelt ;-)

                Du kannst ja auch mal

                print_r(get_defined_functions);

                in dein Script schreiben.

                Dass weißt Du es genauer.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Hallo

                  Du kannst ja auch mal

                  print_r(get_defined_functions);

                  Notice: Use of undefined constant get_defined_functions - assumed 'get_defined_functions' in /home/xxx/www.xxx.de/auth/test.php on line 13
                  get_defined_functions

                  hab "print_r(get_defined_functions);" eingetragen... oder meinst du damit was anderes?

                  ps. gibt es hier eine Funktion, womit man sich neue Beiträge anzeigen lassen kann?

                  1. Hello,

                    Du kannst ja auch mal

                    print_r(get_defined_functions);

                    Notice: Use of undefined constant get_defined_functions - assumed 'get_defined_functions' in /home/xxx/www.xxx.de/auth/test.php on line 13
                    get_defined_functions

                    hab "print_r(get_defined_functions);" eingetragen... oder meinst du damit was anderes?

                    Ach sorry, ich habe wieder den PHP-Quirks-Mode benutzt.

                    print_r(get_defined_functions());

                    so sollte es aber nun funktionieren.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Hallo Tom,

                      viel bringt mir das aber nicht ;-)
                      wenn ich das in mein Script einbaue, weiss ich nur, was mein Server unterstützt, wenn ich aber dieses Script jemand anders gebe, bringt es mir ja nix, wenn das ausgegeben wird *g*

                      ich könnte höchstes eine Abfrage irgendwie basteln, wo das abgefragt wird... hm...

                      Kay