web-dev-qa-db-fra.com

Caractère newline de chaîne JavaScript?

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

Je ne parle pas de l'élément newline HTML (<BR/>). Je m'interroge sur la séquence de caractères de nouvelle ligne utilisée dans les chaînes JavaScript.

393
Landon Kuhn

Je viens de tester quelques navigateurs en utilisant ce stupide morceau 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 sous 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 parfaitement lors de la définition de la valeur, bien que IE et Opera le reconvertissent en \r\n de nouveau en interne. Il existe un article SitePoint avec quelques détails supplémentaires appelé fins de lignes en Javascript .

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

Lors de la soumission d'un formulaire, tous les navigateurs canonisent les nouvelles lignes en %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 d'envoi. (Certains navigateurs bloquent le chargement de la page soumise, mais vous pouvez voir les valeurs de formulaire codées en URL dans la console.)

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

lines = foo.value.split(/\r\n|\r|\n/g);
352
mercator

Oui, c'est universel.

Bien que '\n' soit le caractère universel nouvelle ligne, vous devez garder à l’esprit que, en fonction de votre saisie, les caractères de nouvelle ligne peuvent être précédés de caractères de retour chariot ('\r').

81
Sinan Taifour

N'utilisez pas "\ n". Essayez ceci:

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

Il suffit d'entrer une barre oblique et de continuer sur truckin '! Fonctionne comme un charme.

60
Qasim

Il serait peut-être plus facile de gérer simplement tous les cas du caractère de nouvelle ligne au lieu de vérifier quel cas l’applique. Par exemple, si vous devez remplacer la nouvelle ligne, procédez comme suit:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
52
Quincy

yes utilise\n, sauf si vous générez du code HTML dans lequel vous voulez utiliser <br />

23
Finer Recliner

Fonction de lien par e-mail que j'utilise "% 0D% 0A"

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

var MailMSG = "mailto:[email protected]" 
         + "[email protected]" 
         + "&subject=subject" 
         + "&body=" + bodydata; 
window.location.href = MailMSG; 
} 

[HTML]

<a href="#" onClick="sendMail()">Contact Us</a>
13
ISCI

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

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}
6
Vitalii Fedorenko

Remarque - lorsque vous utilisez ExtendScript JavaScript (le langage de script Adobe utilisé dans des applications telles que 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 caractère de bloc.

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

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
4
JayCrossler

Vous pouvez utiliser des guillemets `` (situés sous le bouton Echap) avec ES6. Donc, vous pouvez écrire quelque chose comme ceci:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
1
Bogdan Surai

J'ai eu le problème d'exprimer newline avec \ n ou \ r\n.
Comme par magie, le caractère \ r utilisé pour le retour chariot a fonctionné pour moi comme une nouvelle ligne.
Dans certains cas, il est donc utile d’envisager aussi\r.

1
Oralet

Une observation pratique ... Dans mon script NodeJS, j'ai la fonction suivante:

function writeToLogFile (message) {
    fs.appendFile('myserverlog.txt', Date() + " " + message + "\r\n", function (err) {
        if (err) throw err;
    });
}

Je n’avais d’abord que "\ n", mais j’ai remarqué que lorsque j’ouvre le fichier journal dans le Bloc-notes, toutes les entrées se trouvent sur la même ligne. Notepad ++, d’autre part, affiche les entrées sur chacune de leurs lignes. Après avoir changé le code en "\ r\n", même le Bloc-notes affiche chaque entrée sur sa propre ligne.

0
user11717468

Je crois que c’est le cas lorsque vous travaillez avec des chaînes JS.

Si vous générez du HTML, cependant, vous devrez utiliser les balises <br /> (et non \n, car vous ne traitez plus avec JS)

0
Pascal MARTIN
printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

Impressions:

Welcome!
Your balance is currently $1000 and your interest rate is 1%.
0
Barbs G