Buchstaben innerhalb eines Wortes mischen ?

sheldonX

Grünschnabel
Halli hallo,

ich möchte erreichen das

Hallo mein Name ist Sheldon!
zu
Hlalo mneie Nmae ist Sdolehn!

wird! (z.B.)

Ich habe schon einige Versuche hinter mit str_shuffle etc. aber die Funktionieren nicht zufriedenstellend.
Denn es muss Formatierung und Satzzeichen erhalten bleiben.

Dazu habe ich dann das gefunden:
http://4umi.com/web/javascript/scramble.php

Es funktioniert genau so, wie ich es brauche.
Leider kapiere ich nicht wie ich das in PHP umsetze.

Hat da jemand ne Idee?
 
Mittels Regulärem Ausdruck alle Wörter finden und diese jeweils mischen.
PHP:
$text = 'Hallo mein Name ist Sheldon!';
echo preg_replace_callback ('/(\w+)/' , create_function('$t', 'return str_shuffle($t[0]);') , $text);

//ergibt dann sowas: olalH enmi Nema ist noeShld!
 
ja ganz genau!
Und natürlich die Satzzeichen. :)

ui das ging schnell....ich teste mal was rum.

Danke! :)

Nachtrag: Wie gesagt funktioniert super. Danke!

Wenn ich jetzt nur Wörter mischen möchte, die länger als 2 Buchstaben sind.
Mach ich das am besten über ne If-Anweisung oder kann man das auch in die Funktion packen?
 
Zuletzt bearbeitet:
Wenn du ne Funktion brauchst die Anfang und Ende gleichhält:

PHP:
function shuffleString($str) {
	$shuffled = $str[0] . str_shuffle(substr($str, 1, strlen($str)-1)) . substr($str, -1);
	return $shuffled;
}
 
Wenn ich jetzt nur Wörter mischen möchte, die länger als 2 Buchstaben sind.
Mach ich das am besten über ne If-Anweisung oder kann man das auch in die Funktion packen?
Ersetze den Pattern
Aus '/(\w+)/' wird '/(\w{3,})/'
Das bedeutet: es soll Wort-Zeichen nehmen, wenn es mindestens 3 sind.

Ist das mit dem Anfang und Ende der Fall? Wenn ja, dann kriegt man das in dieselbe Funktion rein:
PHP:
//Anfangs und Endbuchstaben bleiben bei den Wörtern erhalten. 
//Nur der Mittelteil wird gemischt
echo preg_replace_callback (
        '/(\w)(\w+)(\w)/' , 
        create_function('$t', 'return $t[1].str_shuffle($t[2]).$t[3];'), 
        $text
);
 
Zurück