JavaScript chaîne caractère newline?

est-ce que n est la séquence de caractères universelle en Javascript pour toutes les plateformes? Si non, comment puis-je déterminer le caractère de l'environnement actuel?

Je ne pose pas de questions sur L'élément HTML newline ( <BR/> ). Je pose une question sur la séquence de caractères newline utilisée dans les chaînes JavaScript.

355
demandé sur askewchan 2009-07-21 00:08:52

16 réponses

je viens de tester quelques navigateurs en utilisant ce stupide bit de 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 et Opera 9 sur Windows utilisent \r\n . Tous les autres navigateurs que j'ai testés (Safari 4 et Firefox 3.5 sous Windows, et Firefox 3.0 sous Linux) utilisent \n . Ils peuvent tous Gérer \n très bien lors de la définition de la valeur, bien que IE et Opera convertiront ce retour en \r\n de nouveau en interne. Il y a un Article de SitePoint avec plus de détails appelé fin de ligne en Javascript .

Notez aussi que ceci est indépendant des fins de ligne réelles dans le fichier HTML lui-même (les deux \n et \r\n donnent les mêmes résultats).

lors de la soumission d'un formulaire, tous les navigateurs peuvent canonicaliser les lignes à %0D%0A dans le codage D'URL. Pour voir cela, chargez par exemple data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> et appuyez sur le bouton Soumettre. (Certains navigateurs bloquent la charge de la page soumise, mais vous pouvez voir les valeurs de forme encodées URL dans la console.)

Je ne pense pas que vous devez vraiment faire beaucoup de détermination, cependant. Si vous voulez simplement partager le texte sur les nouvelles lignes, vous pouvez faire quelque chose comme ceci:

lines = foo.value.split(/\r\n|\r|\n/g);
332
répondu mercator 2017-11-03 12:05:43

Oui, c'est universel.

bien que '\n' soit l'universel newline caractères, vous devez garder à l'esprit que, selon votre entrée, de nouveaux caractères de ligne peuvent être précédés par des caractères de retour de chariot ( '\r' ).

72
répondu Sinan Taifour 2009-07-20 20:09:33

de Ne pas utiliser \n, essayez ceci:

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

entrez juste une barre oblique et continuez sur truckin'! Fonctionne comme un charme.

47
répondu Qasim 2016-04-10 07:51:55

il pourrait être plus facile de simplement gérer tous les cas du nouveau caractère de ligne au lieu de vérifier quel cas puis l'appliquer. Par exemple, si vous devez remplacer la nouvelle ligne, faites ce qui suit:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
46
répondu Quincy 2012-01-21 20:32:53

oui utilisez \n, sauf si vous générez du code html, dans lequel vous voulez utiliser <br />

22
répondu Finer Recliner 2012-05-12 21:26:57

lien e-Mail fonction que j'ai utiliser "%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>
12
répondu ISCI 2014-11-28 04:54:32

Obtenir un séparateur de ligne pour le navigateur actuel:

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}
6
répondu Vitalii Fedorenko 2012-02-01 00:34:49

une note-lorsque vous utilisez ExtendScript JavaScript (le langage de script Adobe utilisé dans les applications comme Photoshop CS3+), le caractère à utiliser est "\r". "\n" sera interprété comme un caractère de police, et de nombreuses polices auront donc un bloc de caractère au lieu.

par exemple (pour sélectionner un calque nommé "Note" et ajouter des flux de ligne après toutes les périodes):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
3
répondu JayCrossler 2013-04-07 23:44:34

Dans la réponse à la Nilay ci-dessus (je n'ai pas de commentaire, pas assez de réputation):

quelqu'un connaît ce type de code pour tab key? je suis essayé "%0D%09 " mais pas de travail. – Nilay Sep 26 ' 15 à 13: 57

onglet est un caractère unique, donc si vous essayez juste %09 il devrait être très bien. Un exemple pour voir les codes de caractères individuels:

var output = "";
var s="aaa\tbbb\tccc";
for (var i = 0; i < s.length; i++) {
  output += "i=" + i + " charAt=" + s.charAt(i) + " charCodeAt=" + s.charCodeAt(i) + "\n";
}

console.log(output);
2
répondu Pik Master 2017-11-03 11:21:36

j'ai eu le problème d'exprimer newline avec \n ou \r\n .

Comme par magie, le caractère \r qui est utilisé pour le retour de chariot a fonctionné pour moi comme une nouvelle ligne.

Dans certains cas, il est utile d'envisager \r trop.

1
répondu Oralet 2011-02-02 14:45:14
"151910920 ` vous pouvez utiliser" les guillemets (qui sont en dessous du bouton Esc) avec ES6. Donc vous pouvez écrire quelque chose comme ceci:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
1
répondu Bogdan Surai 2017-05-26 12:46:13

je crois que c'est -- quand vous travaillez avec JS strings.

si vous générez du HTML, cependant, vous devrez utiliser <br /> tags (pas \n , car vous n'avez plus affaire à JS)

0
répondu Pascal MARTIN 2009-07-20 20:12:28
printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently 00 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

Imprime:

Welcome!
Your balance is currently 00 and your interest rate is 1%.
0
répondu Barbs G 2018-05-17 04:15:27

vous pouvez utiliser les valeurs ascii hex, quelque chose comme ceci(cela a fonctionné pour moi):

 var string = "this %0d%0a is a multiline %0d%0a string";

le résultat sera:

this 
is a multiline 
string
0
répondu Wekerle Tibor 2018-07-24 05:34:06

le \n est parfait pour tous les cas que j'ai rencontrés. I vous travaillez avec web, utilisez \n et ne vous en souciez pas (sauf si vous avez eu des problèmes liés à newline).

-3
répondu zzandy 2009-09-11 14:53:14

vous pouvez utiliser <br/> et document.write/ , document.writeln un.

-10
répondu omari Powell 2013-04-16 23:53:23