我现在有一个文本框,我是用微软的c#开发的b/s程序,微软的.NET中有一个textBox,它有一个属性叫做maxlength,比如我的文本框需要用户输入最大4个字符时候,这个时候可以通过设置maxlenth=4来限制用户输入最大字符数为4。但我有一个问题出来了,因为textbox默认编码为unicode编码,也就是说汉字和英文字符他都看作占一个字符来计算,比如我如果设置了maxlenth=4时候,汉字也可以输入4个,字符也可以输入4个.但我在sql server数据库中使用了char数据类型,如果用户输入4个汉字,其实在数据库里面是占8个字符的。当然我可以把数据库中字段改为nchar结构就可以了。但我想在客户端通过js代码自动能够根据用户输入的是汉字时候长度加2,字符时候只加1,这样当我设置textBox的maxlenth=4时候,用户可以输入4个字符或者输入汉字的时候只能输入2个汉字,请问这个该如何实现!!!

解决方案 »

  1.   

    function realLength(val)
    {
        return val.replace(/[^\x00-\xff]/g,"**").length;
    }
      

  2.   

    在文本框的onChange事件中加入处理函数,一旦文本框的值发生变化,就触发这个处理,当输入的值超过指定长度时就弹出警告,并禁止输入和禁止移出焦点
      

  3.   

    文本框不是有MaxLength属性么?
    设置一下大小就可以了
      

  4.   

    兄弟,你没有看清我的帖子,textbox里面是按照unicode编码计算字符数,所以一个汉字和一个英文字符都算一个字符,但我想让汉字算2个字符,这个你有尝试过吗?
      

  5.   

    没做过这样的,我一般数据库里长度不确定的字段都用varchar或nvarchar长度设得大一点,没有LZ的烦恼
      

  6.   

    varchar和nvarchar是长度可变的,建表时指定的长度只不过是最大值,是个界限,实际的宽度是插入的值的长度,只不过其字节数在varchar里面是字符数,在nvarchar里面是字符数*2。而char和nchar是长度不可变的,建表时指定多长就一定是多长,要是定义了(10)即使只保存一个字符也占10个字符的宽度。只要是确定不会用到中文,我就用varchar,比如身份证号码,由于有15位和18位的差别,用varchar(18)比较好,在插入15位的值时会自动使用15个字节,要是前端应用程序需要对所有的15位身份证号码转换成18位,就可以用char(18)来保存,不过一般不要求的话用varchar反而更节省空间。如果可能会保存中文或其它unicode字符,就用nvarchar,道理是一样的,这样比用固定长度的char、nchar字段要节省空间。我只有在确定一个字段保存的值无论如何都是一样长才用char和nchar,比如性别:中文就是“男”或“女”,用nchar(1);英文的简写就是“M”或“F”,用char(1)。