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

How to detect line breaks in a text area input?

本文关键字:输入 区域 换行符 文本 何检测 检测      更新时间:2023-09-26

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

我的网页上的表单上有一个文本区域。我正在使用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有点冗长,所以我正在寻找一些更好的解决方案。谢谢你的所有建议。

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

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

/'n/g 是一个正则表达式,意思是"查找字符'n(换行符),并全局(跨整个字符串)执行此操作。

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

这是一种方法:

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

或者,您可以将所有"裸"'n字符替换为'r'n,然后使用总长度。

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

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

或类似的东西...

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

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

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

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