6.5k Aufrufe
in Skripte(PHP,ASP,Perl...) von uesch Mitglied (135 Punkte)
Hallo,

ich versuche gerade, ein Script zu schreiben, welches mir Buchstaben, die in ein Textfeld eingegeben werden, in Echtzeit umwandelt. Dazu habe ich bisher folgendes gefunden:

function SuchenUndErsetzen(QuellText, SuchText, ErsatzText)
{

if ((QuellText == null) || (SuchText == null)) { return null; }
if ((QuellText.length == 0) || (SuchText.length == 0)) { return QuellText; }


if ((ErsatzText == null) || (ErsatzText.length == 0)) { ErsatzText = ""; }

var LaengeSuchText = SuchText.length;
var LaengeErsatzText = ErsatzText.length;
var Pos = QuellText.indexOf(SuchText, 0);

while (Pos >= 0)
{
QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
}
return QuellText;
}


Und dann im HTML:

<INPUT TYPE="TEXT" NAME="SucheNach" VALUE="a" size="20">
<INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="b" size="20">

<INPUT TYPE="TEXT" NAME="Ergebnis" onkeydown="this.form.Ergebnis.value=SuchenUndErsetzen(this.form.Ergebnis.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)" onchange="this.form.Ergebnis.value=SuchenUndErsetzen(this.form.Ergebnis.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)" size="20">


Das funktioniert soweit, es wird der Buchstabe "a" durch den Buchstaben "b" ersetzt, wenn ich etwas ins Textfeld eingebe. Nun ist meine Frage aber, wie kann ich das ganze mit mehr Buchstaben machen? Es müssen also alle 26 Buchstaben plus einige Sonderzeichen eine Ersetzung erhalten.

Würde mich freuen, wenn mir jemand helfen könnte.

Schönen Gruß,
Üsch

23 Antworten

0 Punkte
von
was für eine Verschlimmbesserung (Murks!) von supporter2010!

du hattest nur ein [i] unterschlagen:

function SuchenUndErsetzen(QuellText, SuchText, ErsatzText) {
SuchText=SuchText.split("");
ErsatzText=ErsatzText.split("");
var maximal=Math.min(SuchText.length,ErsatzText.length);
for (var i=0;i<maximal;i++) {
var reggy=new RegExp(SuchText[i],"g")
QuellText=QuellText.replace(reggy,ErsatzText[i]);
}
return QuellText;
}
0 Punkte
von Experte (6.4k Punkte)
ja, das mit dem Suchtext- / Ersatztext-Index war meine eigentliche Absicht, aber das habe ich gestern verpeilt...
0 Punkte
von Experte (6.4k Punkte)
Damit Du nicht nochmal 5h zum Ändern brauchst, hier nochmal komplett und formatiert:

<!DOCTYPE html>
<html>
<head>

<style type="text/css">
input{position:fixed; left:70px;}
</style>

<script type="text/javascript">
function SuchenUndErsetzen(QuellText, SuchText, ErsatzText) {
SuchText=SuchText.split("");
ErsatzText=ErsatzText.split("");
var maximal=Math.min(SuchText.length,ErsatzText.length);
for (var i=0;i<maximal;i++) {
var reggy=new RegExp(SuchText[i],"g")
QuellText=QuellText.replace(reggy,ErsatzText[i]);

}
return QuellText;
}

</script>
</head>

<body>

<FORM>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach" VALUE="a" size="20"/>
<br/>
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="1" size="20"/>

<br/><br/>
Ergebnis: <INPUT TYPE="TEXT" NAME="Ergebnis" onkeydown="this.value=SuchenUndErsetzen(this.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)" size="20"/>

</FORM>

</body>
</html>
0 Punkte
von Experte (6.4k Punkte)
sorry, irgendwas ist beim kopieren schief gegangen...hier nochmal... (kann ich meine Postingd eigentlich nicht löschen):


<!DOCTYPE html>
<html>
<head>

<style type="text/css">
input {position:fixed; left:70px;}
</style>

<script type="text/javascript">
function SuchenUndErsetzen(QuellText, SuchText, ErsatzText) {
SuchText=SuchText.split("");
ErsatzText=ErsatzText.split("");
var maximal=Math.min(SuchText.length,ErsatzText.length);
for (var i=0;i<maximal;i++) {
var reggy=new RegExp(SuchText[i],"g")
QuellText=QuellText.replace(reggy,ErsatzText[i]);

}
return QuellText;
}

</script>
</head>

<body>

<FORM>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach" VALUE="a" size="20"/>
<br/>
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="1" size="20"/>

<br/><br/>
Ergebnis: <INPUT TYPE="TEXT" NAME="Ergebnis" onkeydown="this.value=SuchenUndErsetzen(this.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)" size="20"/>

</FORM>

</body>
</html>
0 Punkte
von son_quatsch Experte (5.3k Punkte)
Ich bin ja dafür, standardmäßig eine deselektierte Checkbox zu haben "Beitragsformatierung aktivieren". Dann passiert den meisten Leuten auch nicht immer "irgendwas ist beim kopieren schief gegangen", wenn sie Quellcode mit eckigen Klammern posten, ohne diesen selbst in Formatierung zu setzen.
Für registrierte Mitglieder kann der Status jener Checkbox ja gespeichert werden. Und sie müssen es selbst selektieren (hoffentlich erst nachdem sie wissen, was Beitragsformatierung ist).
0 Punkte
von Experte (6.4k Punkte)
nee, das forum unterschlägt da was...is ja blöd...


var reggy=new RegExp(SuchText[ i ],"g")
QuellText=QuellText.replace(reggy,ErsatzText[ i ]);

[ i ], also "eckige Klammer i eckige Klammer" wird hinter SuchText und hinter ErsatzText unterschlagen (wenn man keine Leerzeichen einfügt)...

sorry
0 Punkte
von
nee, das forum unterschlägt da was...is ja blöd...
nur wenn du es unterlässt Quellcode als solchen zu kennzeichnen, dafür ist der Button Code über dem Textfeld da
0 Punkte
von
by the way, was soll
<!DOCTYPE html>
darstellen?
0 Punkte
von Experte (6.4k Punkte)

by the way, was soll
Zitat:
<!DOCTYPE html>
darstellen?


html5 Doctype Deklaration....

www.peterkroener.de/html5-was-geht-heute-schon-was-geht-nicht-der-grosse-ueberblick/
0 Punkte
von
da die
html5 Doctype Deklaration....

alle aktuellen Browser in den Quirksmodus schickt wäre eine aktuelle (HTML4,XHTML1) wohl sinnvoller...

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...