479

\nJavaScript のユニバーサル改行文字シーケンスはすべてのプラットフォームで使用できますか? そうでない場合、現在の環境のキャラクターをどのように決定しますか?

HTML の改行要素 ( ) について質問しているわけではありません<BR/>。JavaScript 文字列内で使用される改行文字シーケンスについてお尋ねします。

4

15 に答える 15

388

このばかげた JavaScript を使用して、いくつかのブラウザーをテストしました。

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>

Windows 上の IE8 および Opera 9 は\r\n. 私がテストした他のすべてのブラウザー (Windows では Safari 4 と Firefox 3.5、Linux では Firefox 3.0) は\n. \nIE と Opera は値を\r\n内部的に再び変換しますが、それらは値を設定するときに問題なく処理できます。Javascriptでの行末と呼ばれる詳細が記載された SitePoint の記事があります。

これは、HTML ファイル自体の実際の行末とは無関係であることにも注意してください (両方とも\n同じ\r\n結果になります)。

フォームを送信するとき、すべてのブラウザーは改行を%0D%0AURL エンコーディングに正規化します。それを確認するには、eg をロードdata:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>して送信ボタンを押します。(一部のブラウザーは、送信されたページの読み込みをブロックしますが、コンソールで URL エンコードされたフォームの値を確認できます。)

ただし、実際に多くの決定を行う必要はないと思います。改行でテキストを分割したいだけなら、次のようにすることができます:

lines = foo.value.split(/\r\n|\r|\n/g);
于 2009-07-20T22:46:51.017 に答える
91

はい、それは普遍的です。

'\n'普遍的な改行文字ですが、入力によっては、改行文字の前にキャリッジ リターン文字 ( '\r') が付く場合があることに注意してください。

于 2009-07-20T20:09:33.813 に答える
58

大文字と小文字をチェックして適用するのではなく、改行文字のすべての大文字と小文字を処理するのが最も簡単な場合があります。たとえば、改行を置き換える必要がある場合は、次のようにします。

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
于 2012-01-21T20:32:53.077 に答える
26

はい、\n を使用します。ただし、HTML コードを生成する場合は、<br />.

于 2009-07-20T20:11:08.053 に答える
14

メールリンク機能では、「%0D%0A」を使用しています。

function sendMail() {
    var bodydata="Before "+ "%0D%0A";
        bodydata+="After"

    var MailMSG = "mailto:aaa@sss.com"
             + "?cc=07@sss.com"
             + "&subject=subject"
             + "&body=" + bodydata;
    window.location.href = MailMSG;
}

HTML

<a href="#" onClick="sendMail()">Contact Us</a>
于 2012-10-10T06:27:43.877 に答える
7

現在のブラウザの行区切り文字を取得します。

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}
于 2011-12-19T03:40:16.903 に答える
4

A note - when using ExtendScript JavaScript (the Adobe Scripting language used in applications like Photoshop CS3+), the character to use is "\r". "\n" will be interpreted as a font character, and many fonts will thus have a block character instead.

For example (to select a layer named 'Note' and add line feeds after all periods):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
于 2013-04-07T23:44:34.603 に答える
3
printAccountSummary: function()
    {return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // Method

版画:

Welcome!
Your balance is currently $1000 and your interest rate is 1%.
于 2018-05-17T02:59:29.123 に答える
2

\nまたは\r\nで改行を表現する際に問題がありました。
魔法のように、改行に使用される文字\rは改行のように機能しました。
そのため、場合によっては \r も考慮すると便利です。

于 2011-02-02T14:01:50.603 に答える
1

JavaScript 文字列を操作している場合は、そうだと思います。

ただし、HTML を生成する場合は、<br />タグを使用する必要があります (\nもう JavaScript を扱っていないため、 ではありません)。

于 2009-07-20T20:12:28.033 に答える
-3

\n私が遭遇したすべてのケースで問題ありません。Web で作業している場合は、これを使用\nしてください (改行に関連する問題がない限り)。

于 2009-09-11T14:53:14.103 に答える