JavaScript のユニバーサル改行文字シーケンスはすべてのプラットフォームで使用できますか\n
? そうでない場合、現在の環境の文字をどのように判別すればよいですか?
HTML の改行要素 ( <BR/>
) について尋ねているのではありません。JavaScript 文字列内で使用される改行文字シーケンスについて尋ねています。
ベストアンサー1
私は、このちょっとした 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
処理できますが、IE と Opera は内部的に に戻します。詳細については、SitePoint の記事を参照してください。\n
\r\n
Javascript の行末。
また、これは HTML ファイル自体の実際の行末とは無関係であることにも注意してください ( と\n
はどちらも\r\n
同じ結果になります)。
フォームを送信すると、すべてのブラウザは%0D%0A
URL エンコードで改行を正規化します。それを確認するには、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);