reemplazar - salto de linea textarea javascript
¿Cómo detectar saltos de línea en una entrada de área de texto? (4)
Aquí hay una forma:
var count = text.length + text.replace(/[^/n]/g, '''').length;
Alternativamente, podría reemplazar todos los caracteres "desnudos" /n
con /r/n
y luego usar la longitud total.
¿Cuál es la mejor manera de verificar el valor del área de texto para los saltos de línea y luego calcular el número de ocurrencias, si corresponde?
Tengo un área de texto en un formulario en mi página web. Estoy usando JavaScript para tomar el valor del área de texto y luego verificar su longitud.
Ejemplo
enteredText = textareaVariableName.val();
characterCount = enteredText.length; // One line break entered returns 1
Si un usuario ingresa un salto de línea en el área de texto, mi cálculo anterior le da un salto de línea de 1. Sin embargo, necesito dar un salto de línea de 2. Por lo tanto, necesito verificar los saltos de línea y el número de ocurrencias y luego agregar esto en la longitud total.
Ejemplo de lo que quiero lograr
enteredText = textareaVariableName.val();
characterCount = enteredText.length + numberOfLineBreaks;
Mi solución antes de hacer esta pregunta fue la siguiente:
enteredText = textareaVariableName.val();
enteredTextEncoded = escape(enteredText);
linebreaks = enteredTextEncoded.match(/%0A/g);
(linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;
Pude ver que codificar el texto y verificar %0A
fue un poco largo, así que busqué mejores soluciones. Gracias por todas las sugerencias.
Haría esto usando una expresión regular:
var inTxt = document.getElementById(''txtAreaId'').value;
var charCount = inTxt.length + inTxt.match(//n/gm).length;
donde //n/
coincide con los saltos de línea (obviamente), g
es la bandera global. m
significa multilínea, que evidentemente necesita en este caso ...
Alternativamente, aunque recuerdo que esto es un poco más lento:
var charCount = inTxt.length + (inTxt.split("/n").length);
Editar Simplemente me di cuenta de que, si no se combinan los saltos de línea, esto generará un error, así que lo mejor es hacerlo:
charCount = intTxt.length + (inTxt.match(//n/) !== null ? inTxt.match(//n/gm).length : 0);
O algo similar...
Para el nuevo JS use encodeURI()
, porque escape()
está en desuso en ECMAScript 1.5.
En su lugar use:
enteredText = textareaVariableName.val(); enteredTextEncoded = encodeURI(enteredText); linebreaks = enteredTextEncoded.match(/%0A/g); (linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;
Puede usar la match
en la cadena que contiene los saltos de línea, y la cantidad de elementos en esa matriz debe corresponderse con la cantidad de saltos de línea.
enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(//n/g)||[]).length;
characterCount = enteredText.length + numberOfLineBreaks;
//n/g
es una expresión regular que significa ''buscar el carácter /n
(salto de línea), y hacerlo globalmente (a través de toda la cadena).
La parte ||[]
es solo en caso de que no haya saltos de línea. Match devolverá null
, por lo que probamos la longitud de una matriz vacía para evitar errores.