Zufallscode AB12 generieren und mit Regex Teilstrings finden
frankx
- programmiertechnik
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ß,
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
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ß,
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
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ß,
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
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ß,
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ß,
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
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
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
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
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