JavaScript统计textarea有效行数

最近有一个需求是需要统计一个页面中textarea的有效行数,并限制总行数,显示当前可输入剩余行数。[当然除了判行数,还可以判空格,逗号,分号等等,都是类似的]。

最初的想法是:
写一个正则将多个连续回车"\n"替换为"\n",str.replace(/\n+/, "\n");
但是这样不能解决前面有多个空行等情况。

后来:
直接按照"\n"split,然后长度大于0的认为是一个空行,计数即可。

具体代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script type="text/javascript">
var maxTagCount = 100;
function checkLine(textArea) {
    var str = textArea.value;
    var lines = str.split('\n');
    var countLine = 0;
    for (var i = 0; i < lines.length; i++) {
        if (lines[i].length > 0) {
            countLine++;
        }
    }
    var tagElement = document.getElementById("tagTextarea");
    
    if (countLine > maxTagCount) {
        var varNewValue = "";
        var index = 0;
        for (var i = 0; i < lines.length; i++) {
            if (index >= maxTagCount) {
                break;
            }
            if (lines[i].length > 0) {
                index++;
            }
            varNewValue += lines[i];
            varNewValue += "\n";
        }
        textArea.value = varNewValue;
        stat_left.innerHTML = 0;
    } else {
        stat_left.innerHTML = maxTagCount - countLine;
    }
}
</script>

网页demo: countLines