504 Stimmen

Was ist das JavaScript-Zeichen für Zeilenumbrüche?

Ist \n die universelle Newline-Zeichenfolge in JavaScript für alle Plattformen? Wenn nicht, wie kann ich das Zeichen für die aktuelle Umgebung bestimmen?

Ich frage nicht nach dem HTML-Newline-Element ( <BR/> ). Ich frage nach der in JavaScript-Zeichenfolgen verwendeten Zeilenumbruchsequenz.

397voto

mercator Punkte 27618

Ich habe gerade einige Browser getestet, die dieses dumme JavaScript verwenden:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);

<textarea id="test" name="test">

</textarea>

IE8 und Opera 9 unter Windows verwenden \r\n . Alle anderen von mir getesteten Browser (Safari 4 und Firefox 3.5 unter Windows und Firefox 3.0 unter Linux) verwenden \n . Sie können alle mit \n beim Einstellen des Wertes, obwohl IE und Opera diesen Wert wieder in \r\n wieder innerlich. Es gibt einen SitePoint-Artikel mit einigen weiteren Details unter dem Titel Zeilenenden in Javascript .

Beachten Sie auch, dass dies unabhängig von den tatsächlichen Zeilenenden in der HTML-Datei selbst ist (beide \n y \r\n die gleichen Ergebnisse liefern).

Beim Absenden eines Formulars werden Zeilenumbrüche von allen Browsern kanonisiert zu %0D%0A in URL-Kodierung. Um das zu sehen, laden Sie z.B. data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> und drücken Sie die Schaltfläche Senden. (Einige Browser blockieren das Laden der übermittelten Seite, aber Sie können die URL-kodierten Formularwerte in der Konsole sehen).

Ich glaube aber nicht, dass Sie wirklich viel bestimmen müssen. Wenn Sie den Text nur an Zeilenumbrüchen trennen wollen, könnten Sie so vorgehen:

lines = foo.value.split(/\r\n|\r|\n/g);

94voto

Sinan Taifour Punkte 9904

Ja, sie ist universell.

Obwohl '\n' ist die universelle Zeilenumbruch Zeichen zu verwenden, müssen Sie beachten, dass je nach Eingabe den Zeichen für den Zeilenwechsel Wagenrücklaufzeichen vorausgehen können ( '\r' ).

75voto

Qasim Punkte 1484

Verwenden Sie nicht " \n ". Versuchen Sie dies einfach:

var string = "this\
is a multi\
line\
string";

Geben Sie einfach einen Backslash ein und fahren Sie weiter! Das klappt wie am Schnürchen.

62voto

Quincy Punkte 1620

Es könnte am einfachsten sein, einfach alle Fälle des neuen Zeilenzeichens zu behandeln, anstatt zu prüfen, welcher Fall vorliegt und ihn dann anzuwenden. Wenn Sie zum Beispiel den Zeilenumbruch ersetzen müssen, gehen Sie wie folgt vor:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

28voto

Finer Recliner Punkte 1549

Ja, verwenden Sie \n Es sei denn, Sie erzeugen HTML-Code, in diesem Fall sollten Sie <br /> .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X