用户名正则验证,要求用户名满足以下条件:
1、只允许输入中文、英文、数字、下划线或它们的组合
2、只能以中文或者英文开头
3、要求4~16字节长度(1个汉字=2字节)
4、不允许出现空白字符(包括全角半角空格、换行符)
恳请高手出招!问了许多,似乎条件3很难满足。实在搞不定就满足1、2、4吧!谢谢!目前只能做到满足1和2要求的:
^[A-Za-z\u4e00-\u9fa5][\w\u4e00-\u9fa5]{3,15}$

解决方案 »

  1.   

    这个我想了一下,觉得可以有这样的算法,首先写个表达式匹配中文,把中文换成两个字母在对换了中文的字符串进行匹配1.2.4。再用字符串的length属性检查长度。代码实现如下:
    <script type="text/javascript">function isMatchName(str){
      var reg1=/([\u4e00-\u9fa5])/g;
      var reg2=/^[A-Za-z][\w]{3,15}$/g;  strmatch=str;
      strmatch.replace(reg1,"aa");  return (strmatch.test(reg2))&&(strmatch.length<=16);
    }</script>以上只供参考。
      

  2.   

    function checkName(str){
      if(/[\s\u3000]/.test(str))return false;//条件4
      var len = str.replace(/[^\x00-]xff]/g,"xx").length;
      if(len>16 && len<4)return false;//条件3
      if(/^[A-Za-z\u4e00-\u9fa5][\w\u4e00-\u9fa5]$/.test(str))return true;//条件1~2
      return false;
    }
      

  3.   

    function checkName(str){
      //if(/[\s\u3000]/.test(str))return false;//条件4 这句不用了 因为[\w\u4e00-\u9fa5]+本来就不带空格和换行
      var len = str.replace(/[^\x00-]xff]/g,"xx").length;
      if(len>16 && len<4)return false;//条件3 没办法判断实际长度只能用这个方法
      if(/^[A-Za-z\u4e00-\u9fa5][\w\u4e00-\u9fa5]+$/.test(str))return true;//条件1~2
      return false;
    }
      

  4.   

    var len = str.replace(/[^\x00-xff]/g,"xx").length;//笔误多了个"]"
      

  5.   

    to r_swordsman
    如果是限制字符 ,怎么写?