online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Uesch vom 06.01.2022, 00:54 Options

Buchstaben im Textfeld umwandeln

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


Antwort schreiben

Antwort 1 von gast42 vom 06.01.2022, 16:03 Options

Wozu willst du Buchstaben in Zeit umwandeln? andere Buchstaben tun's doch auch ;-)


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; 
}


Ablauf:
die beiden Strings Such + Ersatz werden per split() in Arrays ihrer Zeichen gewandelt.
Sollte eins länger sein als das andere wird sicherheitshalber die Länge des kürzeren Arrays verwendet. Alle Zeichen des Suchstrings werden nacheinander (in einer for-Schleife) in einen regulären Suchausdruck umgewandelt.
In replace() wird damit jede Stelle des Quell-Strings durch das ensprechende Zeichen aus Ersatz ersetzt.

Antwort 2 von gast42 vom 06.01.2022, 16:04 Options

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; 
}


) fehlte!

Antwort 3 von gast43 vom 06.01.2022, 16:39 Options

es muss
new RegExp(SuchText,"g")
lauten!

Antwort 4 von Uesch vom 07.01.2022, 03:41 Options

Hallo gast 42 und 43. Vielen Dank für Eure Hilfe.

Würde der HTML-Code denn dann so aussehen?
<INPUT TYPE="TEXT" NAME="SucheNach" VALUE="abc" size="20">
	<INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="def" size="20">

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


Soweit ich das verstanden habe, könnte ich also als SuchText "abcdefghi" eingeben und als ErsatzText "jklmnopqr" und dann würde er zum Beispiel alle "c" im QuellText durch "l" ersetzen. Stimmt das?
Mit dem HTML-Code oben passiert leider gar nichts. Vielleicht ist er aber auch nicht ganz richtig?

Gruß, Üsch

Antwort 5 von gast42 vom 07.01.2022, 06:33 Options

Zitat:
SuchenUndErsetzen(this.form.Ergebnis.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)
ruft die Funktion mit den genannten Parametern auf, die Funktion arbeitet brav (andernfalls Firefox-Fehlerkonsole!), die Funktion liefert einen Rückgabewert - den rufst du niemals auf.

evtl. tut:
this.value=SuchenUndErsetzen(this.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value)

das was du willst.

Antwort 6 von Uesch vom 07.01.2022, 14:27 Options

Hallo,

danke, das hatte ich vergessen. Was er jetzt aber macht, ist dass bei Eingabe von "abc" und "def" gar nichts passiert und nur dann was passiert, wenn ich "a" und "b" bzw. "a" und "bcde" eingebe (bei beiden wird das "a" durch das "b" ersetzt.
Firefox-Fehlerkonsole sagt gar nix.

Woran kann das liegen?

Antwort 7 von gast42 vom 07.01.2022, 19:41 Options

bitte beschreibe deine Vorgehensweise nachvollziehbar!

Antwort 8 von Uesch vom 07.01.2022, 22:45 Options

Also:

HTML-Code:

<FORM>
	<INPUT TYPE="TEXT" NAME="SucheNach" VALUE="abc" size="20">
	<INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="def" size="20">

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

</FORM>


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,"g")
  QuellText=QuellText.replace(reggy,ErsatzText[i]);
 }
 return QuellText;
 }


Nun steht im Feld SucheNach der Wert "abc" und im Feld ErsetzeDurch der Wert "def". Bei Eingabe von beispielsweise "Haus" im Feld "Ergebnis" passiert gar nichts. Wenn ich nun aber im Feld SucheNach "a" und im Feld ErsetzeDurch "b" oder auch "bcd" eingebe, wird das "a" von "Haus" durch ein "b" ersetzt. Es funktioniert also bei einem Buchstaben im Feld SucheNach, nicht aber bei mehreren.

Antwort 9 von supporter2010 vom 07.01.2022, 23:50 Options

Hmm, da ist zwar irgendwie noch ein fehler, aber es funktioniert trotzdem...vielleicht findest du ihn ja...

<html>
<head>

<script type="text/javascript">
function SuchenUndErsetzen(QuellText, SuchText, ErsatzText, SuchText1, ErsatzText1, SuchText2, ErsatzText2, SuchText3, ErsatzText3, SuchText4, ErsatzText4) {
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,"g")
QuellText=QuellText.replace(reggy,ErsatzText);
var reggy=new RegExp(SuchText1,"g")
QuellText=QuellText.replace(reggy,ErsatzText1);
var reggy=new RegExp(SuchText2,"g")
QuellText=QuellText.replace(reggy,ErsatzText2);
var reggy=new RegExp(SuchText3,"g")
QuellText=QuellText.replace(reggy,ErsatzText3);
var reggy=new RegExp(SuchText4,"g")
QuellText=QuellText.replace(reggy,ErsatzText4);
}
return QuellText;
}

</script>
</head>

<body>

<FORM>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach" VALUE="a" size="1">
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch" VALUE="1" size="1"> <br/>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach1" VALUE="e" size="1">
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch1" VALUE="2" size="1"> <br/>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach2" VALUE="i" size="1">
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch2" VALUE="3" size="1"> <br/>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach3" VALUE="o" size="1">
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch3" VALUE="4" size="1"> <br/>
Ersetze: <INPUT TYPE="TEXT" NAME="SucheNach4" VALUE="u" size="1">
durch: <INPUT TYPE="TEXT" NAME="ErsetzeDurch4" VALUE="5" size="1">
<br/><br/>
Ergebnis: <INPUT TYPE="TEXT" NAME="Ergebnis" onkeydown="this.value=SuchenUndErsetzen(this.value, this.form.SucheNach.value, this.form.ErsetzeDurch.value, this.form.SucheNach1.value, this.form.ErsetzeDurch1.value, this.form.SucheNach2.value, this.form.ErsetzeDurch2.value, this.form.SucheNach3.value, this.form.ErsetzeDurch3.value, this.form.SucheNach4.value, this.form.ErsetzeDurch4.value)" size="20">

</FORM>

</body>
</html>

Antwort 10 von Uesch vom 08.01.2022, 03:16 Options

Vielen Dank supporter2010! Es funktioniert wunderbar und ich habe es nun nach 5 Stunden Schreibarbeit für über 50 Buchstaben gemacht und in ein bestehendes Skript eingebaut. Also vielen Dank nochmal!

Antwort 11 von gast42 vom 08.01.2022, 06:44 Options

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

du hattest nur ein 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;
}

Antwort 12 von supporter2010 vom 08.01.2022, 09:23 Options

ja, das mit dem Suchtext- / Ersatztext-Index war meine eigentliche Absicht, aber das habe ich gestern verpeilt...

Antwort 13 von supporter2010 vom 08.01.2022, 09:53 Options

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,"g")
QuellText=QuellText.replace(reggy,ErsatzText);

}
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>

Antwort 14 von supporter2010 vom 08.01.2022, 10:07 Options

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,"g")
QuellText=QuellText.replace(reggy,ErsatzText);

}
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>

Antwort 15 von son_quatsch vom 08.01.2022, 10:14 Options

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).

Antwort 16 von supporter2010 vom 08.01.2022, 10:18 Options

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

Antwort 17 von gast42 vom 08.01.2022, 19:40 Options

Zitat:
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

Antwort 18 von gast42 vom 08.01.2022, 19:43 Options

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

Antwort 19 von supporter2010 vom 09.01.2022, 14:30 Options

Zitat:

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


html5 Doctype Deklaration....

http://www.peterkroener.de/html5-was-geht-heute-schon-was-geht-nich...

Antwort 20 von gast42 vom 09.01.2022, 18:50 Options

da die
Zitat:
html5 Doctype Deklaration....

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

Ähnliche Themen

PHP Seite in statische HTML Seite umwandeln - geht das?
ClaudiaGauss  14.08.2008 - 41 Hits - 3 Antworten

Text per Batch in ein Textfeld kopieren
hrsta  07.12.2008 - 29 Hits - 1 Antwort

der "geben sie die Zahlen/Buchstaben ein" dialog
wurzelpeter  03.12.2008 - 33 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026