frankx: Zufallscode AB12 generieren und mit Regex Teilstrings finden

Hellihello,

dies ist ein DoppelPost, also zwei Themen in einem.

Zum einen möchte ich mit PHP URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83). Hat jemand eine flinke Idee, das hinzukriegen. Es bleibt wohl nix übrig, als die erzeugten IDs dann in einer Liste vorzuhalten, um etwaige zufällige Doppler zu filtern.

Zum anderen möchte ich eigentlich schon länger irgendwas für automatische Gliederungen haben. Konkret alle <h2>Überschrit</h2> in einem Dokument vermutlich per preg_match_all filtern. Das wäre aber auch möglich mit Javascript, so dass man beides anbieten könnte. Der Vorteil mit Javascript wäre, dass man den h2s dann gleich noch automatisch einen Anker verpassen könnte. Die Regex-Syntax von JS ist aber anders als die von PHP gelle? Könnte mir hier jemand ansatzmäßig auf die Sprünge helfen, oder sollte ich irgendeine Library wie mootools einsetzen? Mootools hilft ja für PHP nicht, bei PHP wäre nur zu schauen, dass die RegEx nicht "greedy" wird, oder, um ein passendes Array wirklich nur mit den Inhalten zu extrahieren, und man muss wohl auch die Klammern für Teilausdrücke richtig setzen.

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt
  1. Hi,

    Zum einen möchte ich mit PHP URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83). Hat jemand eine flinke Idee, das hinzukriegen.

    $identifier = 'DJ83';
    Fertig :-)

    Es bleibt wohl nix übrig, als die erzeugten IDs dann in einer Liste vorzuhalten, um etwaige zufällige Doppler zu filtern.

    Waere erst mal zu klaeren, ob du was "zufaelliges" willst, oder was "fortlaufendes".

    Zum anderen möchte ich eigentlich schon länger irgendwas für automatische Gliederungen haben. Konkret alle <h2>Überschrit</h2> in einem Dokument vermutlich per preg_match_all filtern. Das wäre aber auch möglich mit Javascript, so dass man beides anbieten könnte.

    Per JavaScript muesste man (sofern es im aktuellen Dokument stattfinden soll) gar nicht reg-exen, sondern koennte getElementsByTagName o.ae. nutzen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hellihello Krisp,

      Zum einen möchte ich mit PHP URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83). Hat jemand eine flinke Idee, das hinzukriegen.

      $identifier = 'DJ83';
      Fertig :-)

      Das nenn ich eine punktgenaue Antwort (;-).

      Es bleibt wohl nix übrig, als die erzeugten IDs dann in einer Liste vorzuhalten, um etwaige zufällige Doppler zu filtern.

      Waere erst mal zu klaeren, ob du was "zufaelliges" willst, oder was "fortlaufendes".

      Ne, nicht vorhersagbar (für etwaige Kunden). Hottes Ansatz geht ja in die Richtung.

      Ein Array mit Großbuchstaben definieren, eins mit Ziffern.

      Dann per time() und rand() eine Zahl zwischen 0 und 25 (für die Buchstaben) bzw. 0 und 9 (bzw. count($ziffernarray)) zufällig generieren, und dann aus dem Buchstabenarray auslesen. Beim Ziffernarray ist das ja quatsch, da hat man die Ziffer ja schon.

      Per JavaScript muesste man (sofern es im aktuellen Dokument stattfinden soll) gar nicht reg-exen, sondern koennte getElementsByTagName o.ae. nutzen.

      Oh, da hätte ich selbst drauf kommen müssen.

      Dann fehlt nur noch die RegEx für PHP. Muss ich später mal rumklamüsern, und das Fragezeichen für "nongreedy" richtig setzen und die preg_match_all richtig mit Flags versehen und dann das richtig Subarray da rausholen aus dem Ergebnis.

      Dank und Gruß,

      frankx

      --
      tryin to multitain  - Globus = Planet != Welt
      1. Hi,

        Ein Array mit Großbuchstaben definieren, eins mit Ziffern.

        Dann per time() und rand() eine Zahl zwischen 0 und 25 (für die Buchstaben) bzw. 0 und 9 (bzw. count($ziffernarray)) zufällig generieren, und dann aus dem Buchstabenarray auslesen. Beim Ziffernarray ist das ja quatsch, da hat man die Ziffer ja schon.

        Buchstaben "hat" man auch schon - man kennt ja schliesslich die Funktion chr(), oder? ;-)

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hellihello

          Buchstaben "hat" man auch schon - man kennt ja schliesslich die Funktion chr(), oder? ;-)

          Jau, von 32 - 59, oder fängt es mit den kleinen an? Ich google neuerdings in meinem Gedächtnis. Hat auch was für sich.

          Dank und Gruß,

          frankx

          --
          tryin to multitain  - Globus = Planet != Welt
          1. Tach,

            Buchstaben "hat" man auch schon - man kennt ja schliesslich die Funktion chr(), oder? ;-)

            Jau, von 32 - 59, oder fängt es mit den kleinen an? Ich google neuerdings in meinem Gedächtnis.

            von ord('A') bis ord('Z') ;-)

            mfg
            Woodfighter

            1. Hellihello

              von ord('A') bis ord('Z') ;-)

              Somit hat sich das Problem auf die Frage verkürzt: wie kriege ich eine Zufallszahl zwischen zwei vorgegebenen Zahlen. Muss ich wieder real googlen. Ach, geh ich gleich zu php.net.

              Result of search:

                
              <?php  
              for ($i = 0; $i < 2; $i++) {  
               $randLetter[] = chr (rand( ord("A"), ord("Z")));  
               $randNumber[]=rand(0,9);  
              }  
              echo $randIndex = implode(array_merge($randLetter,$randNumber));  
                
              
              

              Dank und Gruß,

              frankx

              --
              tryin to multitain  - Globus = Planet != Welt
              1. Hellihello

                oder

                  
                <?php  
                function giveRandIndex()  
                {  
                 while ($i++ < 2) {  
                  $randLetter[] = chr( rand( ord("A"), ord("Z") ) );  
                  $randNumber[] = rand(0,9);  
                 }  
                 return implode(array_merge($randLetter,$randNumber));  
                }  
                while (count($randIndexList)<3) {  
                 $randIndexList[] = giveRandIndex();  
                }  
                array_unique($randIndexList);  
                var_dump ($randIndexList);  
                
                

                Dank und Gruß,

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
  2. moin,

    dies ist ein DoppelPost, also zwei Themen in einem.

    Zum einen möchte ich mit PHP URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83). Hat jemand eine flinke Idee, das hinzukriegen. Es bleibt wohl nix übrig, als die erzeugten IDs dann in einer Liste vorzuhalten, um etwaige zufällige Doppler zu filtern.

    Thema 1 in Perl, eine Lösung, die selbst unter 500.000 Funktionsaufrufen keine Duplikate generiert:

      
    #!/usr/bin/perl  
      
    ###########################################################################  
    use strict;  
    use Digest::MD5 qw(md5_hex);  
    ###########################################################################  
    sub makeSid{  
     # Erzeugt eine kryptographisch starke zufaellige Session ID.  
     # Zurueckgegeben werden Hexadezimal-Zeichen  
      
     my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9, '+', '-');  
     my $len = scalar @chars;  
      
     my $id .= time();  
     $id .= $$;  
     for(my $i = 0; $i < $len; $i++){  
      $id .= $chars[int(rand($len))];  
     }  
     $id = substr($id, 0, $len);  
     $id = md5_hex($id);  
     return $id;  
    }  
    
    

    Geht bestymmt auch mit PHP.

    Für Headlines einer Gliederung hatte ich mal sowas:
    1.
    2.
    1.1.
    2.1
    1.1.1
    1.1.2 usw.

    h1, h2, h3 usw. machte ich von der Tiefe abhängig, sprich von der Anzahl der Punkte. ein Punkt h2, zwei Punkte h2...

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Tach,

      Zum einen möchte ich mit PHP URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83). Hat jemand eine flinke Idee, das hinzukriegen. Es bleibt wohl nix übrig, als die erzeugten IDs dann in einer Liste vorzuhalten, um etwaige zufällige Doppler zu filtern.

      Thema 1 in Perl, eine Lösung, die selbst unter 500.000 Funktionsaufrufen keine Duplikate generiert:

      Die kann allerdings sicher nicht die Anforderungen erfüllen; die Einschränkung zwei Großbuchstaben und zwei Ziffern erlaubt nichtmal 100000 verschiedene Kombinationen (84100 für 29 und 67600 für 26 Buchstaben).

      mfg
      Woodfighter

      1. Tach,

        Thema 1 in Perl, eine Lösung, die selbst unter 500.000 Funktionsaufrufen keine Duplikate generiert:

        Die kann allerdings sicher nicht die Anforderungen erfüllen; die Einschränkung zwei Großbuchstaben und zwei Ziffern erlaubt nichtmal 100000 verschiedene Kombinationen (84100 für 29 und 67600 für 26 Buchstaben).

        Denkst wirklich, ich würde hier was posten, wenns nix taugt!?

        Hier mein Test, test it:

          
        #!/usr/bin/perl  
          
        ###########################################################################  
        use strict;  
        use Digest::MD5 qw(md5_hex);  
          
        my %test;  
          
        for(1..500000){  
         my $i = makeSid();  
         $test{$i}++;  
        }  
          
        # Duplikate in %test finden  
        while( my ($k, $v) = each %test){  
         if($v > 1){ print "Key $k wurde mehrfach vegeben\n" }  
        }  
          
          
        exit; # EOS  
        ###########################################################################  
        # otto macht haufenweise Duplikate  
        sub otto{  
         my $x = int(rand(30));  
         return $x;  
        }  
        ###########################################################################  
        # makeSid macht keine Duplikate  
        sub makeSid{  
         # Erzeugt eine kryptographisch starke zufaellige Session ID.  
         # Zurueckgegeben werden Hexadezimal-Zeichen  
          
         my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9, '+', '-');  
         my $len = scalar @chars;  
          
         my $id .= time();  
         $id .= $$;  
         for(my $i = 0; $i < $len; $i++){  
          $id .= $chars[int(rand($len))];  
         }  
         $id = substr($id, 0, $len);  
         $id = md5_hex($id);  
         return $id;  
        }  
        
        

        Schönen Tach noch,
        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Tach,

          Thema 1 in Perl, eine Lösung, die selbst unter 500.000 Funktionsaufrufen keine Duplikate generiert:

          Die kann allerdings sicher nicht die Anforderungen erfüllen; die Einschränkung zwei Großbuchstaben und zwei Ziffern erlaubt nichtmal 100000 verschiedene Kombinationen (84100 für 29 und 67600 für 26 Buchstaben).

          Denkst wirklich, ich würde hier was posten, wenns nix taugt!?

          nein, du postest nur etwas anderes als frankx fragte. Das Muster GroßbuchstabeGroßbuchstabeZifferZiffer wirst du mit MD5 wohl nie erreichen.

          mfg
          Woodfighter

        2. Hallo,

          Die kann allerdings sicher nicht die Anforderungen erfüllen; die Einschränkung zwei Großbuchstaben und zwei Ziffern erlaubt nichtmal 100000 verschiedene Kombinationen (84100 für 29 und 67600 für 26 Buchstaben).

          Denkst wirklich, ich würde hier was posten, wenns nix taugt!?

          Rechnen reicht.

          Fünfhunderttausend ist ungefähr siebeneinhalb mal so viel wie zulässige Möglichkeiten:

          URIs erzeugen, (keine URL), also Identifier, nach dem Muster GroßbuchstabeGroßbuchstabeZifferZiffer (DJ83)

          26 Großbuchstaben, 26 Großbuchstaben, 10 Ziffern, 10 Ziffern
          ergeben die von Jens genannten

          67600 Möglichkeiten.

          Du hast das Muster nicht beachtet.

          Freundliche Grüße

          Vinzenz