escape - javascript string delimiter
JavaScript cadena de caracteres de nueva lĂnea? (16)
¿Es /n
la secuencia de caracteres de nueva línea universal en Javascript para todas las plataformas? Si no, ¿cómo puedo determinar el carácter para el entorno actual?
No estoy preguntando sobre el elemento de nueva línea HTML ( <BR/>
). Estoy preguntando acerca de la secuencia de caracteres de nueva línea utilizada en las cadenas de JavaScript.
Acabo de probar algunos navegadores con este poco 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 usan /r/n
. Todos los demás 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 lo convertirán nuevamente a /r/n
interna. Hay un artículo de SitePoint con algunos detalles más llamados Finales de línea en Javascript .
Tenga en cuenta también que esto es independiente de los finales de línea reales en el propio archivo HTML (tanto /n
como /r/n
dan los mismos resultados).
Al enviar un formulario, todos los navegadores pueden convertir las líneas nuevas a %0D%0A
en la codificación de URL. Para ver eso, cargue, por ejemplo, data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>
y presione el botón enviar. (Algunos navegadores bloquean la carga de la página enviada, pero puede ver los valores de formulario con codificación URL en la consola).
Sin embargo, no creo que realmente necesites hacer mucha determinación. Si solo quieres dividir el texto en nuevas líneas, puedes hacer algo como esto:
lines = foo.value.split(//r/n|/r|/n/g);
Creo que lo es, cuando estás trabajando con cadenas JS.
Sin embargo, si está generando HTML, tendrá que usar etiquetas <br />
(no /n
, ya que ya no está tratando con JS)
El /n
está bien para todos los casos que he encontrado. Si está trabajando con la web, use /n
y no se preocupe (a menos que haya tenido problemas relacionados con la nueva línea).
En la respuesta a Nilay anterior (no puedo comentar, no tengo suficiente reputación):
Alguien sabe este tipo de código para la tecla de tabulación? He intentado "% 0D% 09" pero no funciona. - Nilay Sep 26 ''15 a las 13:57
La pestaña es un solo carácter, por lo que si intenta solo % 09 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);
Función de enlace de correo electrónico que 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>
No uses / n, solo prueba esto:
var string = "this/
is a multi/
line/
string";
¡Solo ingrese una barra diagonal y siga avanzando! Funciona de maravilla.
Obtenga un separador de línea para el navegador actual:
function getLineSeparator() {
var textarea = document.createElement("textarea");
textarea.value = "/n";
return textarea.value;
}
Podría ser más fácil manejar todos los casos del nuevo carácter de línea en lugar de verificar qué caso y luego aplicarlo. Por ejemplo, si necesita reemplazar la nueva línea, haga lo siguiente:
htmlstring = stringContainingNewLines.replace(/(/r/n|/n|/r)/gm, "<br>");
Puede usar comillas `` (que están debajo del botón Esc) con ES6. Así que puedes escribir algo como esto:
var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
Puedes usar los valores hexadecimales de ascii, algo como esto (esto funcionó para mí):
var string = "this %0d%0a is a multiline %0d%0a string";
El resultado será:
this
is a multiline
string
Sí, es universal.
Aunque ''/n''
son los caracteres de nueva línea universales, debe tener en cuenta que, dependiendo de su entrada, los nuevos caracteres de línea pueden estar precedidos por caracteres de retorno de carro ( ''/r''
).
Tuve el problema de expresar una nueva línea con / n o / r / n .
Mágicamente, el carácter que se utiliza para el retorno de carro funcionó como una nueva línea.
Así que en algunos casos, es útil tener en cuenta también.
Una nota: cuando se utiliza JavaScript ExtendScript (el lenguaje Adobe Scripting utilizado en aplicaciones como Photoshop CS3 +), el carácter a utilizar es "/ r". "/ n" se interpretará como un carácter de fuente, y muchas fuentes tendrán un carácter de bloque en su lugar.
Por ejemplo (para seleccionar una capa llamada ''Nota'' y agregar fuentes de línea después de todos los períodos):
var layerText = app.activeDocument.artLayers.getByName(''Note'').textItem.contents;
layerText = layerText.replace(//. /g,"./r");
puede utilizar <br/>
y document.write/
, document.writeln
one.
sí use / n, a menos que esté generando código html, en el que desea usar <br />
printAccountSummary: function()
{return "Welcome!" + "/n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method
Huellas dactilares:
Welcome!
Your balance is currently $1000 and your interest rate is 1%.