5.6k Aufrufe
Gefragt 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
Beantwortet 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
Beantwortet von Experte (6.4k Punkte)
ja, das mit dem Suchtext- / Ersatztext-Index war meine eigentliche Absicht, aber das habe ich gestern verpeilt...
0 Punkte
Beantwortet 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
Beantwortet 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
Beantwortet 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
Beantwortet 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
Beantwortet 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
Beantwortet von
by the way, was soll
<!DOCTYPE html>
darstellen?
0 Punkte
Beantwortet 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
Beantwortet von
da die
html5 Doctype Deklaration....

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