<input value="abcdefghijk" onblur="this.value=ys(this.value)">
<script language=JavaScript>
function ys(str)
  {var s = str.replace(/([^\x00-\xff])/g,"\x00$1");
   return (s.length<10)?str:(s.substring(0,10).replace(/\x00/g,''));
  }
</script>

解决方案 »

  1.   

    <script language=javascript>
    function String.prototype.lenB()
    {return this.replace(/[^\x00-\xff]/g,"mm").length;}
    var str = "这是一个可以将汉字计算成两个字节的函数";
    alert("老的算法 = " + str.length);
    alert("新的算法 = " + str.lenB());
    </script>
      

  2.   

    楼主输入英文全角字母试试看,  行不?
    <input type="text" name="text" onkeyUp="isQj(this.value)" maxlength="10">
    <script language="JavaScript">
    <!--
    var i=10;
    function isQj(elem)
    {
      
      var str = elem.substring(elem.length-1,elem.length);
      var pattern=/[\uFE30-\uFFA0]/gi;
      if(pattern.test(str))
      {
        if(i>5)
    {
    i--;
    alert(i)
    document.all.text.maxLength=i;
        }
      }else{
        return true;
      }
    }
    //-->
    </script>
      

  3.   

    function xlength(s) { var dc=s.match(/[^\x00-\xff]/g); return s.length +(dc?dc.length:0); }
      

  4.   

    忘记说了。
    只能用一句正则表达式完成。不用其它的javascript
      

  5.   

    如果要10个字:
    <input name="aa" onpropertychange="if(this.value.replace(/[^\x00-\xff]/g,'m').length>10)alert('你输入的字符不能大于10个');">
    如果要总个字:
      

  6.   

    晕!一句两句有什么不同吗!就那么喜欢一句话的函数啊!
    <input value="abcdefghijk" onblur="this.value=this.value.replace(/([^\x00-\xff])/g,"\x00$1").length<10?this.value:this.value.substring(0,10).replace(/\x00/g,'')
    ">
      

  7.   

    <input value="abcdefghijk" onblur="this.value=this.value.replace(/([^\x00-\xff])/g,'\x00$1').length<10?this.value:this.value.substring(0,10).replace(/\x00/g,'')
    ">
      

  8.   

    hoho
    是因为要用.net的正则表达式控件。所以才弄得那么麻烦的。
    大家说的方法其实都可行。只是这个项目要求尽量不使用javascript。
    这个板块的正则高手多,所以来这里问。
    大家再帮我想想把?
      

  9.   

    所谓的 .net的正则表达式控件 到了客户端都是转化成 javascript 的, 不信你可以查看源代码, 只是系统帮你封装了你看不到而已, 所以说"这个项目要求尽量不使用javascript"这个说法是不对的, 在浏览器里只支持XML. HTML与脚本, 现在 .net 里的任何控件最终在客户端里都被解释成 HTML 和 脚本. 你这样做吧:
    tbYour.Attributes["onblur"] = "javascript: if(value.replace(/[^\x00-\xff]/g, 'mm').length>10){alert('对不起, 你的输入超长!'); select()}";  //C#
      

  10.   

    不好意思, 上面的代码忘了转义:
    tbYour.Attributes["onblur"] = @"javascript: if(value.replace(/[^\x00-\xff]/g, 'mm').length>10){alert('对不起, 你的输入超长!'); select()}";  //C#