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

IT技术 javascript jquery special-characters line-breaks
2021-03-12 03:23:29

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

我的网页上的表单上有一个文本区域。我正在使用 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个回答

您可以match在包含换行符的字符串上使用,并且该数组中的元素数应对应于换行符的数量。

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

/\n/g是一个正则表达式,意思是“查找字符\n(换行符),并在全局范围内(在整个字符串中)进行查找”

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

感谢您的回答,但我很好奇如果用户\n自己输入会发生什么也许他们只是想表达这个字符串。这种方式是否会将\n字符串替换为下一行?
2021-04-25 03:23:29
是的,它会的。Javascript 并不真正依赖于操作系统,它只是在浏览器之间有所不同,并且这个答案中没有任何内容不能一直回到 IE6。
2021-04-30 03:23:29

这是一种方法:

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

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

Elias:我认为它实际上是将所有不是换行符的东西都替换为空,然后计算剩下的长度,这只是换行符。相当聪明!
2021-04-20 03:23:29
这将使换行符以外的任何内容的计数加倍,并且仅适用于第一个换行符之前的字符。如果我没记错的话,这与 OP 的问题完全相反。
2021-04-25 03:23:29

我会使用正则表达式来做到这一点:

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

或者类似的东西...

如果没有换行符,match将 return null,因此访问length将引发错误。
2021-04-21 03:23:29

对于新的 JS 使用encodeURI(),因为escape()在 ECMAScript 1.5 中已弃用。

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

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

let textArray = text.split(/^/gm)
console.log(textArray.length)
谢谢。这个答案有助于找到换行符,同时也能够将原始文本保留在变量中。
2021-04-27 03:23:29