如何使用JavaScript检查字符串长度

时间:2012-06-15 08:00:59

标签: javascript forms

我希望在按下键时获得字符串长度,就像StackOverflow那样。

Example of StackOverflow showing length

我尝试使用onblur执行此操作,但它无效。我该怎么做?

11 个答案:

答案 0 :(得分:43)

关于您应该使用哪个事件的问题:use the input event, and fall back to keyup/keydown in older browsers.

这是一个DOM0风格的例子:

someElement.oninput = function() {
  this.onkeydown = null;
  // Your code goes here
};
someElement.onkeydown = function() {
  // Your code goes here
};

另一个问题是如何计算字符串中的字符数。根据您对“字符”的定义,到目前为止发布的所有答案都不正确。当您确定只输入BMP Unicode符号时,string.length答案可靠。例如,'a'.length == 1,正如您所期望的那样。

然而,对于补充(非BMP)符号,事情有点不同。例如,''.length == 2,即使那里只有一个Unicode符号。这是因为JavaScript exposes UCS-2 code units as “characters”

幸运的是,仍然可以通过一些hackery来计算JavaScript字符串中的Unicode符号数。您可以使用Punycode.js的实用程序函数在UCS-2字符串和Unicode代码点之间进行转换:

// `String.length` replacement that only counts full Unicode characters
punycode.ucs2.decode('a').length; // 1
punycode.ucs2.decode('').length; // 1 (note that `''.length == 2`!)

P.S。我刚刚注意到Stack Overflow使用的计数器脚本会出错。尝试输入,您会看到它(错误地)计为两个字符。

答案 1 :(得分:14)

更新:自从我写这篇文章以来,输入事件得到了相当程度的支持。在IE9中它仍然不是100%,所以你必须等待一段时间才能完全淘汰IE9。然而,根据我对这个问题的回答,输入不仅仅是我所提出的方法的替代品,所以我建议切换。

使用keyup事件

var inp = document.getElementById('myinput');
var chars = document.getElementById('chars');
inp.onkeyup = function() {
  chars.innerHTML = inp.value.length;
}
<input id="myinput"><span id="chars">0</span>

编辑:

对于那些暗示keydown的人来说只是一个注释。那不行。在将字符添加到输入框或textarea之前,keydown触发,因此值的长度将是错误的(落后一步)。因此,唯一有效的解决方案是keyup,在添加字符后触发

答案 2 :(得分:5)

您应该将函数绑定到keyup事件

textarea.keyup = function(){
   textarea.value.length....
} 

使用jquery

$('textarea').keyup(function(){
   var length = $(this).val().length;
});

答案 3 :(得分:4)

快速而肮脏的方式是简单绑定到keyup事件。

&#13;
&#13;
$('#mytxt').keyup(function(){
    $('#divlen').text('you typed ' + this.value.length + ' characters');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type=text id=mytxt >
<div id=divlen></div>
&#13;
&#13;
&#13;

但更好的方法是将可重用函数绑定到多个事件。例如,对于change(),您也可以预期文本更改,例如粘贴(使用上下文菜单,快捷方式也会被keyup捕获)

答案 4 :(得分:3)

function cool(d)
{
    alert(d.value.length);
}
<input type="text" value="" onblur="cool(this)">

它将返回字符串的长度

而不是blur使用keydown事件。

答案 5 :(得分:3)

 var myString = 'sample String';   var length = myString.length ;

首先你需要定义一个keypressed处理程序或某种事件触发器来监听, 顺便说一句,获得长度非常简单,如上所述

答案 6 :(得分:2)

我不确定你的意思是通过尝试onblur,但要获得任何字符串的长度,使用它的.length属性,所以在文本框或textarea的情况下:

document.getElementById("textarea").value.length

当然,将该ID更改为实际ID。

答案 7 :(得分:2)

基本上:为keyup元素分配<textarea>处理程序,在其中计算<textarea>的长度,如果长度为<div>,则将计数写入单独的var min = 15; document.querySelector('#tst').onkeyup = function(e){ document.querySelector('#counter').innerHTML = this.value.length < min ? (min - this.value.length)+' to go...' : ''; } 短于最小值。

这是一个例子 -

body {font: normal 0.8em verdana, arial;}
#counter {color: grey}
<textarea id="tst" cols="60" rows="10"></textarea>
<div id="counter"></div>
{{1}}

答案 8 :(得分:1)

留下回复(以及回答到问题标题),对于未来的googlers ......

您可以使用.length来获取字符串的长度。

  

var x ='Mozilla'; var empty ='';

     

console.log('Mozilla是'+ x.length +'代码单位长');

     

/ *“Mozilla长7个代码单元”* /

     

console.log('空字符串的长度为'+ empty.length);

     

/ *“空字符串的长度为0”* /

如果您打算获得textarea id="txtarea"的长度,那么您可以使用以下代码。

txtarea = document.getElementById('txtarea');
console.log(txtarea.value.length);

您应该可以使用BMP Unicode符号。如果你想支持像()这样的“非BMP符号”,那么它就是一个边缘情况,你需要找到一些解决方法。

答案 9 :(得分:0)

<html>
<head></head>
<title></title>
<script src="/js/jquery-3.2.1.min.js" type="text/javascript"></script>
<body>
Type here:<input type="text" id="inputbox" value="type here"/>
<br>
Length:<input type="text" id="length"/>
<script type='text/javascript'>
    $(window).keydown(function (e) {
    //use e.which
    var length = 0;
    if($('#inputbox').val().toString().trim().length > 0)
    {
        length = $('#inputbox').val().toString().trim().length;
    }

    $('#length').val(length.toString());
  })
</script>
</body>
</html>

答案 10 :(得分:0)

这是我编写的用于获取 Unicode 字符字符串的函数:

function nbUnicodeLength(string){
    var stringIndex = 0;
    var unicodeIndex = 0;
    var length = string.length;
    var second;
    var first;
    while (stringIndex < length) {

        first = string.charCodeAt(stringIndex);  // returns an integer between 0 and 65535 representing the UTF-16 code unit at the given index.
        if (first >= 0xD800 && first <= 0xDBFF && string.length > stringIndex + 1) {
            second = string.charCodeAt(stringIndex + 1);
            if (second >= 0xDC00 && second <= 0xDFFF) {
                stringIndex += 2;
            } else {
                stringIndex += 1;
            }
        } else {
            stringIndex += 1;
        }

        unicodeIndex += 1;
    }
    return unicodeIndex;
}