Peter Thomassen: [Enter]-Zeichen in einer <textarea> durch <br> ersetzen

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

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

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

      1. 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, "&#160;");

        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
        &#229; 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

        1. 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:

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

          1. Es geht nicht um leerzeichen die mehrfach vorkommen, sondern
               welche, die nicht hinter einer wortgrenze stehen

          inhalt =inhalt.replace(/\B\s/g, "&#160;");

          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!

          1. 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
          &#229; oder was der charset auch ist und fertig.

          Wozu brauche ich das?

          Danke für die Infos,
          Peter

          PS: Hast du ICQ?

          1. 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:

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

            1. Es geht nicht um leerzeichen die mehrfach vorkommen, sondern
                 welche, die nicht hinter einer wortgrenze stehen

            inhalt =inhalt.replace(/\B\s/g, "&#160;");

            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

            1. 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
            &#229; 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.

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

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

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

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

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

            2. Hi Ed X,

              Nun ja, man kann nicht immer richtig liegen ;)

              :)

              1. 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,"[&#160;]");

              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
              &#229; 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