JavaScript строка символа новой строки? - PullRequest
386 голосов
/ 21 июля 2009

Является ли \n универсальной последовательностью символов новой строки в Javascript для всех платформ? Если нет, то как определить символ для текущей среды?

Я не спрашиваю об элементе новой строки HTML (<BR/>). Я спрашиваю о последовательности символов новой строки, используемой в строках JavaScript.

Ответы [ 14 ]

348 голосов
/ 21 июля 2009

Я только что протестировал несколько браузеров, использующих этот глупый кусочек 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>

IE8 и Opera 9 в Windows используют \r\n. Все остальные протестированные мной браузеры (Safari 4 и Firefox 3.5 для Windows и Firefox 3.0 для Linux) используют \n. Все они могут прекрасно обрабатывать \n при установке значения, хотя IE и Opera будут преобразовывать его обратно в \r\n снова внутри. Есть статья SitePoint с некоторыми подробностями, которая называется Окончание строк в Javascript .

Обратите внимание, что это не зависит от фактических окончаний строк в самом файле HTML (и \n, и \r\n дают одинаковые результаты).

При отправке формы все браузеры могут преобразовывать переводы строки в %0D%0A в кодировке URL. Чтобы увидеть это, загрузите, например, data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> и нажмите кнопку отправки. (Некоторые браузеры блокируют загрузку отправленной страницы, но вы можете увидеть значения формы в кодировке URL в консоли.)

Я не думаю, что вам действительно нужно много чего-то определять. Если вы просто хотите разделить текст на новые строки, вы можете сделать что-то вроде этого:

lines = foo.value.split(/\r\n|\r|\n/g);
80 голосов
/ 21 июля 2009

Да, это универсально.

Хотя '\n' является универсальным символом новой строки , вы должны помнить, что, в зависимости от введенного значения, символам новой строки может предшествовать символ возврата каретки ('\r').

58 голосов
/ 10 апреля 2016

Не используйте "\ n". Просто попробуйте это:

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

Просто введите обратную косую черту и продолжайте движение! Работает как шарм.

52 голосов
/ 22 января 2012

Может быть проще всего обработать все случаи символа новой строки вместо проверки, в каком случае применять его. Например, если вам нужно заменить символ новой строки, выполните следующие действия:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
22 голосов
/ 21 июля 2009

да используйте \ n, если вы не генерируете HTML-код, в котором вы хотите использовать <br />

13 голосов
/ 10 октября 2012

Функция ссылки на электронную почту, которую я использую "% 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>
6 голосов
/ 19 декабря 2011

Получить разделитель строк для текущего браузера:

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}
4 голосов
/ 08 апреля 2013

Примечание. При использовании ExtendScript JavaScript (язык сценариев Adobe, используемый в таких приложениях, как Photoshop CS3 +), символом, который нужно использовать, является "\ r". «\ n» будет интерпретироваться как символ шрифта, и поэтому многие шрифты будут иметь символ блока.

Например (чтобы выбрать слой с именем «Примечание» и добавить перевод строки после всех периодов):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
1 голос
/ 26 мая 2017

Вы можете использовать `` кавычки (которые находятся ниже кнопки Esc) с ES6. Таким образом, вы можете написать что-то вроде этого:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
1 голос
/ 02 февраля 2011

У меня была проблема с выражением новой строки с \ n или \ r \ n .
Волшебным образом персонаж \ r , который используется для возврата каретки, работал для меня как перевод строки.
Поэтому в некоторых случаях полезно рассмотреть \ r тоже.

...