2009-07-20 17 views
333

¿Es \n la secuencia de caracteres de nueva línea universal en Javascript para todas las plataformas? Si no, ¿cómo determino el carácter para el entorno actual?cadena de JavaScript carácter de nueva línea?

No estoy preguntando sobre el elemento HTML de nueva línea (<BR/>). Pregunto acerca de la secuencia de caracteres de nueva línea utilizada dentro de las cadenas de JavaScript.

+5

Tengo un control de entrada de línea múltiple donde se espera que el usuario ingrese una nueva lista separada por línea. Necesito analizar la lista dividiendo primero la cadena en nuevas líneas. –

+6

@ landon9720: Para mis controles de entrada multilínea, tengo una función 'getValue' que toma el' valor' y devuelve 'value.replace (/ \ r \ n/g, '\ n')' - solo para mantener la salida coherente en todos los navegadores/plataformas. –

+1

¡Buena pregunta especialmente para aquellos que son nuevos en la programación! Fuera de HTML y en JavaScript, es bueno saber cómo pasar a la siguiente/nueva línea. –

Respuesta

316

acabo probado unos navegadores que utilizan este poco tonto 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 y Opera 9 en Windows utilizan \r\n. Todos los otros navegadores que probé (Safari 4 y Firefox 3.5 en Windows y Firefox 3.0 en Linux) usan \n. Todos pueden manejar \n bien al configurar el valor, aunque IE y Opera volverán a convertirlo a \r\n internamente. Hay un artículo de SitePoint con algunos detalles más llamados Line endings in Javascript.

Tenga en cuenta también que esto es independiente de los finales de línea reales en el archivo HTML en sí (ambos \n y \r\n dan los mismos resultados).

Al enviar un formulario, todos los navegadores canonicalizan las líneas nuevas a %0D%0A en la codificación URL. Para ver eso, carga, p. data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> y presione el botón de enviar. (Algunos navegadores bloquean la carga de la página enviada, pero puede ver los valores de forma codificados en URL en la consola.)

No creo que realmente deba hacer mucho por determinar. Si lo que desea es dividir el texto en nuevas líneas, se podría hacer algo como esto:

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

Funcionó para mí, tuvo que utilizar el indicador global sin embargo:/\ r \ n | \ r | \ n/g – AdrianoFerrari

+2

/[\ r \ n]/g es más simple –

+14

@Edson y es incorrecto, ya que tratará '\ r \ n' como dos nuevas líneas en lugar de una. Si quieres abreviar, '/ \ r? \ N/g' probablemente lo haga (¿quién todavía usa Mac OS 9 de todos modos?). – mercator

65

Sí, es universal.

Aunque '\n' es lo universal nueva línea caracteres, hay que tener en cuenta que, dependiendo de su entrada, los nuevos caracteres de línea pueden ser precedidos por caracteres de retorno de carro ('\r').

+42

\ n es el carácter * de alimentación de línea * universal (LF). La secuencia exacta de bytes de nueva línea depende de la plataforma (\ r \ n, \ n, o \ r: http://en.wikipedia.org/wiki/Newline). Y * esa es * la pregunta que Landon está haciendo.Te estás contradiciendo cuando dices por primera vez que es el carácter de nueva línea universal, y luego dices que puede estar precedido por un CR. ¿Cuál es? – mercator

+2

\ n es el carácter de nueva línea (avance de línea), incluso si está precedido por un retorno de carro. CR nunca se debe usar solo, aunque la mayoría de las aplicaciones y aplicaciones de Windows lo analizarán como una nueva línea. LF funciona igual de bien en Windows también. CR es solo un artefacto de la época en que las computadoras no eran más que máquinas de escribir electrónicas. – GolezTrol

+1

@GolezTrol Existen razones válidas para usar CR por sí mismo. Por ejemplo, volver al comienzo de la línea en una ventana de consola para sobrescribir la línea, sin moverse a la siguiente línea. Esto se usa a menudo para escribir los indicadores de cambio de porcentaje en las utilidades de la línea de comando. – Dan

19

sí utilice \ n, a no ser que va a generar código HTML, en el que desea utilizar <br />

0

Creo que es - cuando se está trabajando con las cadenas JS.

Si va a generar HTML, sin embargo, usted tendrá que usar <br /> etiquetas (no \n, ya que no está tratando con más JS)

-3

El \n está muy bien para todos los casos que he encontrado. Si trabaja con la web, use \n y no se preocupe (a menos que haya tenido problemas relacionados con la nueva línea).

1

I tenían el problema de expresar de nueva línea con \ n o \ r \ n.
Mágicamente el carácter \ r que se utiliza para el retorno de carro funcionó para mí como una nueva línea.
Entonces, en algunos casos, es útil considerar también.

+0

Esto sucede si su cadena tiene el juego de caracteres ISO-8859-1 – CodeBrauer

6

Consigue un separador de línea para el navegador actual:

function getLineSeparator() { 
    var textarea = document.createElement("textarea"); 
    textarea.value = "\n"; 
    return textarea.value; 
} 
+3

¿Qué tal 'return textarea.value;'? – XP1

+0

¿El uso de 'JSON.stringify' en el resultado cambiará el carácter? Si trato de ver el resultado en una llamada a 'alert() ', no me mostrará el carácter a menos que lo haga primero (no es que el carnet deba ser legible para ser efectivo, por supuesto) –

44

Puede ser que sea más fácil de manejar simplemente todos los casos de la nueva línea de caracteres en lugar de cheques cuyo caso luego aplicarlo. Por ejemplo, si es necesario sustituir el salto de línea a continuación, hacer lo siguiente: función de enlace

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

Excelente. Funciona muy bien en versiones posteriores FF e IE (sin embargo, versiones anteriores no probadas) – EvilDr

+0

funciona bien. gracias – Regolith

12

Email yo uso "% 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> 
+0

¿alguien sabe este tipo de código para la tecla de tabulación? me prueban "% 0D% 09" pero no funcionan. – Nilay

3

Una nota: cuando se utiliza JavaScript ExtendScript (el lenguaje de Adobe Scripting utilizado en aplicaciones como Photoshop CS3 +), el carácter que se utilizará es "\ r". "\ n" se interpretará como un carácter de fuente y, en su lugar, muchas fuentes tendrán un carácter de bloque.

Por ejemplo (para seleccionar una capa llamada 'Nota' y añadir saltos de línea después de que todos los períodos):

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

Estaba intentando averiguar por qué '\ n' y'
'no funcionaban en mi script de Photoshop ... ¡Gracias! –

-10

puede utilizar <br/> y la document.write/, document.writeln uno.

+3

Por favor, vuelva a leer la pregunta. Específicamente dice que él * * no está preguntando por '
' – Leigh

40

No utilice \ n, Intenta esto:

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

Solo tienes que introducir una barra invertida y mantener en truckin! Funciona de maravilla.

+2

Esta respuesta merece más votos por arriba. me recuerda a las cadenas de comillas triples en python – danidee

+0

ES6 también admite valores de líneas múltiples con el caracter 'tilde' (también llamado backtick). – Qasim

+3

@Qasim - FYI, creo que tilde y backtick son caracteres diferentes, ver ['~' Tilde] (https://en.wikipedia.org/wiki/Tilde) vs ['\' 'Backtick] (https: // en.wikipedia.org/wiki/Grave_accent#Use_in_programming). –

3

En la respuesta a Nilay anterior (que no puedo comentar, no es suficiente la reputación):

cualquiera sabe este tipo de código de tecla de tabulación? Estoy intentado "% 0D% 09" pero no funciona. - Nilay Sep 26 de '15 a 13:57

Tab es un solo carácter, por lo que si se intenta simplemente % 09 que debería estar bien. un ejemplo para ver los códigos de caracteres individuales:

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);

1

puede usar `` comillas (wich están por debajo de botón Esc) con ES6. Entonces puede escribir algo como esto:

var text = `fjskdfjslfjsl 
skfjslfkjsldfjslfjs 
jfsfkjslfsljs`; 
Cuestiones relacionadas