正则表达式问题,高分求救
需要规定输入的字符串长度4-20位   可以由0-9   a-z   A-Z   -   _和汉字组成 
 如果有汉字   一个汉字要占两位长度算   怎么写这个表达式啊? 
------解决方案--------------------[0-9a-zA-Z\u4e00-\u9fa5]{4-10}
------解决方案--------------------用正则比较麻烦,主要是占位的问题。
简单的方法,把数据字段类型加个n就可以了。
另:可用js 判断。或C#判断长度。正则检查字符合法性。
------解决方案--------------------///  <summary>  
         /// 检测含有中文字符串的实际长度 
         ///  </summary>  
         ///  <param name= "str "> 字符串 </param>  
         public static int cnLenth(string str) 
         { 
             System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding(); 
             byte[] b = n.GetBytes(str); 
             int l = 0; // l 为字符串之实际长度 
             for (int i = 0; i  <= b.Length - 1; i++) 
             { 
                 if (b[i] == 63) //判断是否为汉字或全脚符号 
                 { 
                     l++; 
                 } 
                 l++; 
             } 
             return l; 
         }
------解决方案--------------------正则倒也不是不可以实现,不过确实是太麻烦了,长度为20可以通过设置MaxLength属性为20来实现,然后正则如下,主要是分多种情况考虑最少4位的问题   
 ^([0-9a-zA-Z -_]{4}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([0-9a-zA-Z -_]{2}[\u4e00-\u9fa5][0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([\u4e00-\u9fa5][0-9a-zA-Z -_]{2}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|[0-9a-zA-Z -_]([\u4e00-\u9fa5][0-9a-zA-Z -_][0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([\u4e00-\u9fa5]{2}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)
------解决方案--------------------这个需要你在 服务器端 验证 
 那个限制输入 没用 你要知道 客户端的东西 你是不能控制的.
------解决方案--------------------楼主应该先使用上面的函数判断长度 
 在判断是否符合规则 
 ([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5]){4-20} 
------解决方案--------------------hertcloud(·£孙子兵法£·) ( ) 信誉:100    Blog  2007-03-22 11:08:32  得分: 0         
    楼主应该先使用上面的函数判断长度 
 在判断是否符合规则 
 ([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5]){4-20} 
 --------------------------------------------- 
 up        
------解决方案--------------------情况确实是这样的,MaxLength是按字数,而不是字符数计算的,看来只能是像大家说的,用函数判断长度,然后用正则判断规则了   
 ^[0-9a-zA-Z -_\u4e00-\u9fa5]+$   
 PS:其实4-20位,正则不是不可以,只是需要考虑的情况太多,写出来恐怕得数千字符,而且也不是一时半会就能写出来的,没有完全测试好,就贴了代码,抱歉了