484 votes

Caractère de nouvelle ligne dans une chaîne JavaScript ?

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

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

7 votes

J'ai un contrôle de saisie multiligne où l'utilisateur doit entrer une liste séparée par des nouvelles lignes. J'ai besoin d'analyser la liste en divisant d'abord la chaîne de caractères sur les nouvelles lignes.

8 votes

@landon9720 : Pour mes contrôles d'entrée multi-lignes, j'ai une getValue qui prend le value et retourne value.replace(/\r\n/g,'\n') - juste pour que la sortie soit cohérente entre les navigateurs/plateformes.

1 votes

Bonne question, surtout pour ceux qui sont novices en matière de programmation ! En dehors du HTML et du JavaScript, il est bon de savoir comment passer à la ligne suivante/nouvelle.

390voto

mercator Points 16196

Je viens de tester quelques navigateurs en utilisant ce stupide bout 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>

Utilisation d'IE8 et d'Opera 9 sur Windows \r\n . Tous les autres navigateurs que j'ai testés (Safari 4 et Firefox 3.5 sur Windows, et Firefox 3.0 sur Linux) utilisent \n . Ils peuvent tous gérer \n lors de la définition de la valeur, bien qu'IE et Opera le convertissent à nouveau en \r\n à nouveau en interne. Il y a un article de SitePoint avec plus de détails appelé Les fins de ligne en Javascript .

Notez également 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 canonisent les nouvelles lignes en %0D%0A dans l'encodage 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 du 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 simplement couper le texte sur les nouvelles lignes, vous pouvez faire quelque chose comme ceci :

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

14 votes

Cela a fonctionné pour moi, mais j'ai dû utiliser le drapeau global : / \r\n | \r | \n /g

20 votes

@Edson et erronée, puisqu'elle traitera \r\n comme deux lignes de saut au lieu d'une. Si vous voulez être court, /\r?\n/g fera probablement l'affaire (qui utilise encore Mac OS 9 de toute façon ?).

1 votes

Étant donné que l'article de SitePoint date de 2004, les informations qu'il contient peuvent ne pas être pertinentes pour les implémentations actuelles de JS.

91voto

Sinan Taifour Points 3878

Oui, c'est universel.

Bien que '\n' est l'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' ).

64 votes

\n est l'universel alimentation en ligne caractère (LF). La séquence exacte des octets de nouvelle ligne dépend de la plate-forme ( \r\n , \n ou \r : fr.wikipedia.org/wiki/Newline ). Et c'est la question que Landon pose. Vous vous contredisez lorsque vous dites d'abord que c'est le caractère universel de nouvelle ligne, puis que vous dites qu'il peut être précédé d'un CR. Lequel est-ce ?

2 votes

\n est le caractère newline (saut de ligne), même s'il est précédé d'un retour chariot. CR ne doit jamais être utilisé seul, bien que la plupart des applications et apis Windows l'analysent comme un saut de ligne. LF fonctionne tout aussi bien sous Windows. CR est juste un artefact de l'époque où les ordinateurs n'étaient que des machines à écrire électroniques.

4 votes

Il y a des raisons valables d'utiliser le CR seul. Par exemple, revenir au début de la ligne dans une fenêtre de console afin d'écraser la ligne, sans passer à la ligne suivante. Ceci est souvent utilisé pour écrire des indicateurs de progression en pourcentage dans les utilitaires en ligne de commande.

58voto

Quincy Points 448

Il serait peut-être plus simple de traiter tous les cas du caractère de nouvelle ligne plutôt que de vérifier quel cas et de l'appliquer. Par exemple, si vous devez remplacer le caractère de nouvelle ligne, faites ce qui suit :

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

1 votes

Superbe. Fonctionne très bien dans les dernières versions de FF et d'IE (je n'ai pas testé les anciennes versions).

27voto

Finer Recliner Points 646

Oui utiliser \n à moins que vous ne génériez du code html, auquel cas vous voudrez utiliser l'adresse suivante <br />

15voto

ISCI Points 103

Fonction de lien e-mail, j'utilise "%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>

0 votes

Quelqu'un connaît ce type de code pour la touche tabulation ? j'ai essayé "%0D%09" mais ça ne marche pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X