What is the JavaScript string newline character?
javascript, newline
Solution
I've just tested a few browsers using this silly bit of 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 and Opera 9 on Windows use `\r\n`. All the other browsers I tested (Safari 4 and Firefox 3.5 on Windows, and Firefox 3.0 on Linux) use `\n`. They can all handle `\n` just fine when setting the value, though IE and Opera will convert that back to `\r\n` again internally. There's a SitePoint article with some more details called Line endings in Javascript.
Note also that this is independent of the actual line endings in the HTML file itself (both `\n` and `\r\n` give the same results).
When submitting a form, all browsers canonicalize newlines to `%0D%0A` in URL encoding. To see that, load e.g. `data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>` and press the submit button. (Some browsers block the load of the submitted page, but you can see the URL-encoded form values in the console.)
I don't think you really need to do much of any determining, though. If you just want to split the text on newlines, you could do something like this:
lines = foo.value.split(/\r\n|\r|\n/g);
Problem
Is `\n` the universal newline character sequence in JavaScript for all platforms? If not, how do I determine the character for the current environment? I'm not asking about the HTML newline element (`<BR/>`). I'm asking about the newline character sequence used within JavaScript strings.