如何检测文本区输入中的换行符?

时间:2012-06-08 14:13:15

标签: javascript jquery special-characters line-breaks

检查换行符的文本区域值然后计算出现次数的最佳方法是什么?

我的网页上的表单上有一个文本区域。我使用JavaScript来获取文本区域的值,然后检查其长度。

实施例

enteredText = textareaVariableName.val();
characterCount = enteredText.length; // One line break entered returns 1

如果用户在文本区域中输入换行符,则上面的计算会给换行符的长度为1.但是我需要给换行符长度为2.因此我需要检查换行符和换行符号。发生,然后将其添加到总长度。

我想要实现的例子

enteredText = textareaVariableName.val();
characterCount = enteredText.length + numberOfLineBreaks;

在提出这个问题之前我的解决方案如下:

enteredText = textareaVariableName.val();
enteredTextEncoded = escape(enteredText);
linebreaks = enteredTextEncoded.match(/%0A/g);
(linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;

我可以看到编码文本和检查%0A有点啰嗦,所以我想要一些更好的解决方案。谢谢你的所有建议。

5 个答案:

答案 0 :(得分:65)

您可以对包含换行符的字符串使用match,该数组中的元素数量应与换行符数相对应。

enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(/\n/g)||[]).length;
characterCount = enteredText.length + numberOfLineBreaks;

/\n/g是一个正则表达式,意思是'寻找字符\n(换行符),并在全局(整个字符串)中进行。

||[]部分是为了防万一没有换行符。匹配将返回null,因此我们测试空数组的长度,以避免错误。

答案 1 :(得分:4)

我会使用正则表达式执行此操作:

var inTxt = document.getElementById('txtAreaId').value;
var charCount = inTxt.length + inTxt.match(/\n/gm).length;

/\n/匹配换行符(显然),g是全局标志。 m代表多线,在这种情况下你显然需要......
或者,虽然我记得这有点慢:

var charCount = inTxt.length + (inTxt.split("\n").length);

修改的 刚刚意识到,如果没有匹配的换行符,这会吐出一个错误,所以最好这样做:

charCount = intTxt.length + (inTxt.match(/\n/) !== null ? inTxt.match(/\n/gm).length : 0);

或类似的东西......

答案 2 :(得分:3)

这是一种方式:

var count = text.length + text.replace(/[^\n]/g, '').length;

或者,您可以使用\n替换所有“裸”\r\n字符,然后使用整体长度。

答案 3 :(得分:2)

对于新的JS使用encodeURI(),因为在ECMAScript 1.5中不推荐使用escape()

而是使用:
enteredText = textareaVariableName.val(); enteredTextEncoded = encodeURI(enteredText); linebreaks = enteredTextEncoded.match(/%0A/g); (linebreaks != null) ? numberOfLineBreaks = linebreaks.length : numberOfLineBreaks = 0;

答案 4 :(得分:2)

您可以根据新行拆分文本:

let textArray = text.split(/^/gm)
console.log(textArray.length)