我想验证用户名,用户名如果是中文最大是5个汉字,如果是英文最大是10个。我知道只有中文或者只有英文是这样写的^[\u4e00-\u9fa5]{1,5}$|^[\dA-Za-z_]{1,10}$,但是如果中文和英文混合的话该怎么写?比如“发表新话题”这五个字是最大值,“话题区1234”是最大值。这种正则表达式怎么写?谢谢

解决方案 »

  1.   


    <script type="text/javascript">
    var t=/^[\u4e00-\u9fa5]{1,5}[A-Za-z_0-9]{1,10}$/; //限制中文1-5,限制英文或数字1-10
    alert(t.test("话题区1234"));
    </script> 而且如果编码不同比如UTF-8和GB
    [\u4e00-\u9fa5]也是不同的,大概
      

  2.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    <script type="text/javascript">
    var creg=/[\u4e00-\u9fa5]/;
    var ereg=/[a-zA-Z1-9]/;
    var str='话题区1234';
    var l=0;
    for(var i=0;i<str.length;i++){
    if(creg.test(str.charAt(i))){
    l+=2;
    }else if(ereg.test(str.charAt(i))){
    l+=1;
    }else{
    alert("error");
    break;
    }
    }
    alert(l);
    </script>
    </head><body>
    </body>
    </html>
    貌似纯正则的话很难实现