[Enter]-Zeichen in einer <textarea> durch <br> ersetzen
Peter Thomassen
- javascript
0 Ed X0 Peter Thomassen0 Ed X0 Peter Thomassen0 Ed X
Hi nochmal,
ich möchte [Enter]-Zeichen in einer <textarea> durch <br> ersetzen.
Bei normalen Zeichen mache ich das folgendermaßen:
document.forms["formular"].feld.value = document.forms["formular"].feld.value.replace(/a/g,"b");
Wie geht das bei [Enter]-Zeichen?
Schon mal im Voraus danke für die Info(s),
Peter
Hi nochmal,
It's me again ;)
ich möchte [Enter]-Zeichen in einer <textarea> durch <br> ersetzen.
Bei normalen Zeichen mache ich das folgendermaßen:
Analyse, unterbrich mich wo ich falsch rate.......
Ein Druck auf die EnterTaste in Textareas erzeugt Zeilenumbrüche.
Zeilenumbrüche werden "normalerweise" als '\n' dargestellt.
Kümmern wir uns um das normalerweise. Windows interpretiert Zeilen-
umbrüche immer als CRLF-Sequenz \r\n ( las dir mal alle charCodeAt() ausgeben und du wirst das sehen (immer 13,10)).
Die müssen wir "normalisieren", warum? Weil die mozilla engine statt
der hässlichen \r\n auch unter windows nur ein gottgewolltes \n
zurückgibt. Und es gibt betriebssysteme, die sollen sogar immer nur
"\n" zurückliefern..... ;)
inhalt =inhalt.replace(/\r\n/g, "\n");
und dann \n to <br>
inhalt =inhalt.replace(/\n/g, "<br>");
eventuell ist auch im IE unter Mac diese CRLF-Sequenz zu beachten.
Möglicherweise ist diese dann auch vertauscht "\n\r".
Baue hier lieber workarounds, statt RegEx auszureizen. der IE ist
manchmal unberechenbar :(
Bye Ed X
Hi Ed X,
danke für die Hilfe(n).
Analyse, unterbrich mich wo ich falsch rate.......
Alles richtig geraten.
inhalt =inhalt.replace(/\r\n/g, "\n");
inhalt =inhalt.replace(/\n/g, "<br>");
Funzt soweit. Ich habe jetzt:
text.value = text.value.replace(/\r\n/g, "\n");
text.value = text.value.replace(/\n\r/g, "\n");
text.value = text.value.replace(/<br>\n/g, "\n");
text.value = text.value.replace(/\n/g, "<br>");
Jetzt wüsste ich noch gerne, wie ich zwei oder mehr Leerstellen zu einer mache! Geht das?
Danke schon mal im Voraus :),
Peter
Hi Peter,
alles klar? dann kanns los gehen.
Ein Blick in die Kristallkugel sagt mir, dass du Text, der aus einer
textarea stammt, Html formatieren willst.
Dazu folgendes: 1. eine textarea ist kein Textverarbeitungsprogramm
egal welche klimmzüge du machst.
2. Ist es den aufwand wert? oder solltes du nicht
einfach mit mit hartem Zeilenumbruch und <pre>
arbeiten?
Wenn 2. nicht stimmt, musst du ein paar mehr dinge beachten:
1. Tabs werden auch nicht dargestellt -> normalisieren
inhalt =inhalt.replace(/\t/g, " ");
ich denke 4 leerzeichen sind ein gutes maß. Wie aber kommen die
überhaupt darein, die Tabs?? ......... copy und paste.... machts
möglich
2. Es geht nicht um leerzeichen die mehrfach vorkommen, sondern
welche, die nicht hinter einer wortgrenze stehen
inhalt =inhalt.replace(/\B\s/g, " ");
3. dreh und angelpunt der geschichte ist die reihenfolge
erst html sonderzeichen wie &, <, >, " durch entities ersetzen
dann tabs killen
dann zeilen umbruch erledigen
dann die leerzeichen
wer mir jetzt noch mit einem vertikalen tabulator kommt kann mich
mal...... (der wäre auch noch \s)
Zum schluss ersetz du mit einer routine alle charsets >127 durch
å oder was der charset auch ist und fertig.
Sollte jemand dafür einen regulären ausdruck kennen, der das kann und
in JavaScript geht, für gute nachrichten bin ich immer zu haben ;)
Bye Ed X
Hi Ed X,
Ein Blick in die Kristallkugel sagt mir, dass du Text, der aus einer
textarea stammt, Html formatieren willst.
Nein. Ich will den Text auf eine MySQL-Datenbank vorbereiten, bzw. ich habe die Aufgabe, das mit JavaScript hinzubekommen.
Dazu folgendes: 1. eine textarea ist kein Textverarbeitungsprogramm
egal welche klimmzüge du machst.
Das soll es auch gar nicht sein. Ich will einfach nur sinnlose Leerzeichen aussortieren und Sonderzeichen umschreiben.
2. Ist es den aufwand wert? oder solltes du nicht
einfach mit mit hartem Zeilenumbruch und <pre>
arbeiten?
Das hatte ich auch erst vorgeschlagen, geht aber nicht. Es geht um ein Eingabeformular für Liedtexte, und wir möchten gerne alles einheitlich haben. Momentan sind wir bei ca. 4000 Liedtexten angekommen, die alle <br> verwenden - noch manuell eingegeben. Die müsste man alle konvertieren - ist das nicht noch umständlicher?
Wenn 2. nicht stimmt, musst du ein paar mehr dinge beachten:
- Tabs werden auch nicht dargestellt -> normalisieren
inhalt =inhalt.replace(/\t/g, " ");
Kommen in einem Liedtext Tabs vor? :)
ich denke 4 leerzeichen sind ein gutes maß. Wie aber kommen die
überhaupt darein, die Tabs?? ......... copy und paste.... machts
möglich
yup
- Es geht nicht um leerzeichen die mehrfach vorkommen, sondern
welche, die nicht hinter einer wortgrenze stehen
inhalt =inhalt.replace(/\B\s/g, " ");
Funzt nicht. Ich möchte zwei oder mehr Leerzeichen entfernen - wenn ich es so mache, bleiben die Leerzeichen, sie werden wg. der Umschreibung sogar angezeigt!
h_in = h_in.replace(/\B\s/g,"");
funzt aber - danke!
- dreh und angelpunt der geschichte ist die reihenfolge
erst html sonderzeichen wie &, <, >, " durch entities ersetzen
Hab ich (', ´, ` durch ', ä, ö, ü, Ä, Ö, Ü, ß durch Umschreibungen)
dann tabs killen
yup
dann zeilen umbruch erledigen
dann die leerzeichen
ok werde ich vertauschen
wer mir jetzt noch mit einem vertikalen tabulator kommt kann mich
mal...... (der wäre auch noch \s)
Was ist bitte ein vertikaler Tabulator??
Außerdem .... wenn ich das richtig verstanden habe, kann \s vieles sein (\f\n\t\v und Leerzeichen)!!
Zum schluss ersetz du mit einer routine alle charsets >127 durch
å oder was der charset auch ist und fertig.
Wozu brauche ich das?
Danke für die Infos,
Peter
PS: Hast du ICQ?
Hi Peter,
Ein Blick in die Kristallkugel sagt mir, dass du Text, der aus einer
textarea stammt, Html formatieren willst.
Nein. Ich will den Text auf eine MySQL-Datenbank vorbereiten, bzw. ich habe die Aufgabe, das mit JavaScript hinzubekommen.
Nun ja, man kann nicht immer richtig liegen ;)
2. Ist es den aufwand wert? oder solltes du nicht
einfach mit mit hartem Zeilenumbruch und <pre>
arbeiten?
Das hatte ich auch erst vorgeschlagen, geht aber nicht. Es geht um ein Eingabeformular für Liedtexte, und wir möchten gerne alles einheitlich haben. Momentan sind wir bei ca. 4000 Liedtexten angekommen, die alle <br> verwenden - noch manuell eingegeben. Die müsste man alle konvertieren - ist das nicht noch umständlicher?
gebe mich geschlagen
Wenn 2. nicht stimmt, musst du ein paar mehr dinge beachten:
- Tabs werden auch nicht dargestellt -> normalisieren
inhalt =inhalt.replace(/\t/g, " ");
Kommen in einem Liedtext Tabs vor? :)
Oh ha, wenn man den refrain (typo)grafisch absetzen will zb, machen
sich tabs manchmal ganz gut.
- Es geht nicht um leerzeichen die mehrfach vorkommen, sondern
welche, die nicht hinter einer wortgrenze stehen
inhalt =inhalt.replace(/\B\s/g, " ");
Funzt nicht. Ich möchte zwei oder mehr Leerzeichen entfernen - wenn ich es so mache, bleiben die Leerzeichen, sie werden wg. der Umschreibung sogar angezeigt!
h_in = h_in.replace(/\B\s/g,"");
tja hier war ich von der falschen annahme mit der
HTMLtext-Formatierunug ausgegangen, hätte mir deinen Text besser
durchlesen sollen, sorry
- dreh und angelpunt der geschichte ist die reihenfolge
erst html sonderzeichen wie &, <, >, " durch entities ersetzen
Hab ich (', ´, ` durch ', ä, ö, ü, Ä, Ö, Ü, ß durch Umschreibungen)
dann tabs killen
yup
dann zeilen umbruch erledigen
dann die leerzeichen
ok werde ich vertauschen
weil du sonst die <br> eliminierst....
wer mir jetzt noch mit einem vertikalen tabulator kommt kann mich
mal...... (der wäre auch noch \s)
Was ist bitte ein vertikaler Tabulator??
\v ist ein evertikaler Tabulator
Außerdem .... wenn ich das richtig verstanden habe, kann \s vieles sein (\f\n\t\v und Leerzeichen)!!
und deshalb der reihe nach erst tabs dann \n dann leerzeichen
\f od. \v wird ir wirklich kaum unterkommen, und wenn sollten
browser das ignorieren (textareas glaube ich auch)
Zum schluss ersetz du mit einer routine alle charsets >127 durch
å oder was der charset auch ist und fertig.
Wozu brauche ich das?
weil du dir dann das ersetzen der Umlaute sparen kannst, und außerdem
solche gemeinheiten wie norwegische runen Zeichen uä abfängst. Sowas
soll bei Songs schon mal vorkommen. (oder sind die bei euch alle
englisch?)
Vor allem bekommst du keine Probleme, wenn einer auf seinem rechner
einen falschen zeichensatz eingestellt hat. Wenn du zum beispiel
slawische zeichen eingibst und nicht konvertierst werden sie in einem
browser mit western latin-1(und so sind die meisten eingestellt)
falsch dargestellt. Konvertierst du sie zu unicode darstellung
(charCodeAt gibt entgegen dem was in Selfhtml steht unicode zurück)
hast null probleme :)
Danke für die Infos,
hehe, kein Problem
Bye Ed X
PS: Hast du ICQ?
Sorry, no. Aber ich denk mal drüber nach.
Hi Peter,
mir ist gerade folgendes aufgefallen, so geht das nicht mit den tabs,
denn:
erst wandeln wir sie in leerzeichen, dann killen wir alle leerzeichen,
die nich hinter wortgrenzen stehen :(
reihenfolge ändern bringt nichts, denn /\B\s/ killt evtl. (hängt am
modifier)auch tabs hinter \n :((, zumindest aber immer \t hinter \t
in Perl würde /\B\x20/ helfen, aber ich weis nicht ob JavaScript hier
mitspielt
IE6, NN4 und NN6 hab ich erfolgreich getestet
HTH,
Bye Ed X
Hi Ed X,
wieso heißt du eigentlich so?
mir ist gerade folgendes aufgefallen, so geht das nicht mit den tabs,
denn:
erst wandeln wir sie in leerzeichen, dann killen wir alle leerzeichen,
die nich hinter wortgrenzen stehen :(
Ich brauche sie ja eigentlich gar nicht - wg. der zentrierten Formatierung.
in Perl würde /\B\x20/ helfen, aber ich weis nicht ob JavaScript hier
mitspielt
hilft es nicht, Tabulatorzeichen erst in eine ungewöhnliche Zeichenfolge wie )%$=( umzuwandeln, und nachher wieder rückgängig? Dann hätte man halt das Problem, wenn diese Zeichenfolge in einem Liedtext vorkommt *gg*
IE6, NN4 und NN6 hab ich erfolgreich getestet
Was hast du mit diesen Browsern getestet?
Bye,
Peter
Hi, Peter.
Hi Ed X,
wieso heißt du eigentlich so?
der name ist irgenwann mal hängengeblieben, als es um spitznamen
ging. X steht für austauschbar und Ed ist halt kurz. Ich habe mir nie
wirklich gedanken drum gemacht.
mir ist gerade folgendes aufgefallen, so geht das nicht mit den tabs,
denn:
erst wandeln wir sie in leerzeichen, dann killen wir alle leerzeichen,
die nich hinter wortgrenzen stehen :(
Ich brauche sie ja eigentlich gar nicht - wg. der zentrierten Formatierung.
Dann würde ich sie einfach killen, durch (einzelne) leerzeichen.
Dann funktioniert /\B\s/ auch wieder :)
in Perl würde /\B\x20/ helfen, aber ich weis nicht ob JavaScript hier
mitspielt
IE6, NN4 und NN6 hab ich erfolgreich getestet
Was hast du mit diesen Browsern getestet?
Den matcher mit dem HexCharCode.
Bye
Ed X, der sich jetzt ins (computerfreie) WE abseilt
Hi Ed X.
[... Tabs ...]
Ich brauche sie ja eigentlich gar nicht - wg. der zentrierten Formatierung.
Dann würde ich sie einfach killen, durch (einzelne) leerzeichen.
Dann funktioniert /\B\s/ auch wieder :)
Das hab ich ja gemeint :))
IE6, NN4 und NN6 hab ich erfolgreich getestet
Was hast du mit diesen Browsern getestet?
Den matcher mit dem HexCharCode.
Sorry, ich hab keine Ahnung, was du meinst.
Wie wandle ich nochmal diese Sonderzeichen um?
Ed X, der sich jetzt ins (computerfreie) WE abseilt
Neiiiiiiiiiiin!!!! ich brauch dich doch :))
Bye,
Peter
Hi, Peter.
Dann funktioniert /\B\s/ auch wieder :)
Das hab ich ja gemeint :))
Alles wird gut.
IE6, NN4 und NN6 hab ich erfolgreich getestet
Was hast du mit diesen Browsern getestet?
Den matcher mit dem HexCharCode.
/\B\x20/
...^^^^
Hexadezimaler Zeichencode: '' maskiert 'x'; 'x' bedeuted folgende
zahl ist Hexadezimal und '20' bedeuted dezimal 32 = ein leerzeichen
Sorry, ich hab keine Ahnung, was du meinst.
Wie wandle ich nochmal diese Sonderzeichen um?
über stringlänge iterieren
jedes Zeichen fragen bist du >127
var i = 0;
while(i < text.length)
{
if (text.charCodeAt(i) > 126)
text = text.substring(0,i) + "&#" + text.charCodeAt(i) + ";" + text.substring(i+1, text.length);
i++;
}
ist nicht besonders performant aber es funktioniert
Ed X, der sich jetzt ins (computerfreie) WE abseilt
Neiiiiiiiiiiin!!!! ich brauch dich doch :))
oh doch, und der Rucksack ist gepackt,
diesmal wirklich bis Montag
Bye,
Ed X
Hi Ed X,
Nun ja, man kann nicht immer richtig liegen ;)
:)
- Tabs werden auch nicht dargestellt -> normalisieren
inhalt =inhalt.replace(/\t/g, " ");
Kommen in einem Liedtext Tabs vor? :)
Oh ha, wenn man den refrain (typo)grafisch absetzen will zb, machen
sich tabs manchmal ganz gut.
Ja, aber nicht, wenn alle Songtexte zentriert angezeigt werden und man deswegen immer
Refrain:
blabla
schreibt. Apropos - man könnte noch was schreiben, dass nach "Refr." und "Refrain" automatisch ein Doppelpunkt gesetzt wird, falls keiner da ist und dann umgebrochen wird, wenn noch nicht umgebrochen wurde (kannst du das??).
h_in = h_in.replace(/\B\s/g,"[ ]");
tja hier war ich von der falschen annahme mit der
HTMLtext-Formatierunug ausgegangen, hätte mir deinen Text besser
durchlesen sollen, sorry
Stand ja nicht direkt drin, macht aber nix.
dann zeilen umbruch erledigen
dann die leerzeichen
ok werde ich vertauschen
weil du sonst die <br> eliminierst....
klar
Was ist bitte ein vertikaler Tabulator??
\v ist ein evertikaler Tabulator
Ich meine, wozu braucht man einen?
Außerdem .... wenn ich das richtig verstanden habe, kann \s vieles sein (\f\n\t\v und Leerzeichen)!!
und deshalb der reihe nach erst tabs dann \n dann leerzeichen
\f od. \v wird ir wirklich kaum unterkommen, und wenn sollten
browser das ignorieren (textareas glaube ich auch)
Wie können in einer <textarea> eigentlich ein Seitenvorschubzeichen (\f) bzw. ein vertikales Tabulatorzeichen (\v) vorkommen?? Auch copy / paste? wozu braucht man ein Seitenv.-Zeichen?
Zum schluss ersetz du mit einer routine alle charsets >127 durch
å oder was der charset auch ist und fertig.
Wozu brauche ich das?
weil du dir dann das ersetzen der Umlaute sparen kannst, und außerdem
solche gemeinheiten wie norwegische runen Zeichen uä abfängst. Sowas
soll bei Songs schon mal vorkommen. (oder sind die bei euch alle
englisch?)
Nein, querbeet.
Wie wandle ich das um?
Vor allem bekommst du keine Probleme, wenn einer auf seinem rechner
einen falschen zeichensatz eingestellt hat. Wenn du zum beispiel
slawische zeichen eingibst und nicht konvertierst werden sie in einem
browser mit western latin-1(und so sind die meisten eingestellt)
falsch dargestellt. Konvertierst du sie zu unicode darstellung
(charCodeAt gibt entgegen dem was in Selfhtml steht unicode zurück)
hast null probleme :)
Kenn ich zur Genüge :))
Danke für die Infos,
hehe, kein Problem
Nochmal danke :)
PS: Hast du ICQ?
Sorry, no. Aber ich denk mal drüber nach.
Bitte schnell ;)
DANKE! *gg*
Peter