【问题标题】:How to check string length with JavaScript如何使用 JavaScript 检查字符串长度
【发布时间】:2012-06-18 07:04:33
【问题描述】:

我想像 StackOverflow 一样获取按键时的字符串长度。

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

【问题讨论】:

  • 使用onkeyup/onkeydown 事件。您可以发布您尝试过的代码吗?
  • 你的问题真的是获取字符串的长度吗?
  • onblur 指的是焦点的反面,即你要离开这个领域。这不是合适的事件处理程序。
  • 他只是要求正确的事件来绑定一个函数

标签: javascript forms


【解决方案1】:

这就是我编写的用于获取 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;
}

【讨论】:

    【解决方案2】:
    <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>
    

    【讨论】:

    • 然而 val 和 val() 是非常奇怪的字符。 ;)
    【解决方案3】:

    function cool(d)
    {
        alert(d.value.length);
    }
    &lt;input type="text" value="" onblur="cool(this)"&gt;

    它会返回字符串的长度

    使用keydown 事件代替blur

    【讨论】:

      【解决方案4】:

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

      使用keyup事件

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

      编辑:

      对于那些建议keydown的人来说只是一个注释。那是行不通的。 keydown 触发 before 字符被添加到输入框或文本区域,因此值的长度将是错误的(落后一步)。因此,唯一可行的解​​决方案是 keyup,它会在添加字符后 触发。

      【讨论】:

      • 我建议你也在这里发布你的代码 - 当目标站点不可用时它更有帮助
      • 感谢您的建议。已更新。
      • 这是过时的建议。 Use the more appropriate input event where available, then fall back to keyup/keydown. 另外,请注意,这并不能正确计算字符串中的符号数。
      • 它可能不是最先进的,但它似乎工作得很好。它当然没有被弃用(至少据我所知)。
      • @bvukelic 如果您通过粘贴(不使用键盘)或拖动文本输入文本,keyup 事件将不会触发;或者在听写文本时,例如。 input 事件确实如此。作为奖励,input 事件会在你举起钥匙之前触发 - 让它感觉更快。
      【解决方案5】:

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

      $('#mytxt').keyup(function(){
          $('#divlen').text('you typed ' + this.value.length + ' characters');
      });
      <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>

      但最好将一个可重用函数绑定到多个事件。例如还可以更改(),因此您还可以预期文本更改,例如粘贴(使用上下文菜单,快捷方式也将被 keyup 捕获)

      【讨论】:

        【解决方案6】:

        基本上:将keyup 处理程序分配给&lt;textarea&gt; 元素,在其中计算&lt;textarea&gt; 的长度,如果其长度小于最小值,则将计数写入单独的&lt;div&gt;

        这是一个例子-

        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>

        【讨论】:

          【解决方案7】:

          留下回复(以及对问题标题的答案),为未来的谷歌员工...

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

          var x = 'Mozilla'; var 空 = '';

          console.log('Mozilla is ' + x.length + ' 代码单元长');

          /*"Mozilla 有 7 个代码单元" */

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

          /*"空字符串长度为0" */

          如果你打算得到textarea的长度id="txtarea"那么你可以使用下面的代码。

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

          您应该能够将其与 BMP Unicode 符号一起使用。如果您想支持像 (?) 这样的“非 BMP 符号”,那么它是一种极端情况,您需要找到一些解决方法。

          ?

          【讨论】:

            【解决方案8】:

            至于你应该使用哪个事件的问题: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”

            幸运的是,仍然可以通过一些骇客来计算 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`!)
            

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

            【讨论】:

            • ? 甚至不受标准 Microsoft 网络字体的支持,因此它使用的可能性非常低,恕我直言。编辑:我可能是错的......它肯定不会出现在上面的答案正文中。
            • 这只是一个例子。随意用任何星体(即非 BMP)Unicode 符号替换它。
            • 感谢您指出这一点。大多数说英语的人都忽略了这个问题。
            • 也许已经很晚了,但我要感谢您提供的信息。这超出了菜鸟的想象。
            【解决方案9】:
             var myString = 'sample String';   var length = myString.length ;
            

            首先你需要定义一个按键处理程序或某种事件触发器来监听, 顺便说一句,获取长度真的很简单,就像上面提到的那样

            【讨论】:

              【解决方案10】:

              你应该绑定一个函数到 keyup 事件

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

              使用 jquery

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

              【讨论】:

                【解决方案11】:

                我不确定你尝试过 onblur 是什么意思,但是要获取任何字符串的长度,请使用它的 .length 属性,所以对于文本框或文本区域:

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

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

                【讨论】:

                • OP 正在谈论使用的事件 - onblur
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-06-23
                • 1970-01-01
                • 2010-09-05
                • 1970-01-01
                • 1970-01-01
                • 2018-03-22
                相关资源
                最近更新 更多