很奇怪的説。。
我想写个验证首位为字母,@前的用户名为4-32位的字母、数字或下划线
但是怎么写都不对,请教一下大侠们了。。
var reg=new RegExp("^[A-Za-z](\w{3,31})\@(\w+)\.(\w+)$");麻烦大侠解释一下这样写的问题是什么~~~~~

解决方案 »

  1.   


    var reg=/^[A-Za-z](\w{3,31})\@(\w+)\.(\w+)$/; 
      

  2.   

    new RegExp("^[A-Za-z](\w{3,31})\@(\w+)\.(\w+)$"); 
    不说正则对不对,但是用字符串来定义的话,注意转义
    像正则的\w就应该写成\\w
    所以推荐用1楼的方式写
      

  3.   


    var reg=/^[A-Za-z]\w{3,31}@\w+\.\w+$/;//使用RegExp()//里面的参数要使用\\来转义,比如new RegExp("\\w");这才表示\w,然后你的正则里许多括号没必要,这样会分组捕获,降低效率
    var s1="[email protected]",s2="[email protected]",s3="[email protected]";
    alert(reg.test(s1));
    alert(reg.test(s2));
    alert(reg.test(s3));
      

  4.   

    你这种写法有两个问题:
    1,@这个符号是不要转义的,你转义了。要把前面的那个\取消掉。
    2,如果你用构造方法去得到正则表达式的对象,那你传入进去的字符串中\也是要转义的,所以最后变成为:
    var reg=new RegExp("^[A-Za-z](\\w{3,31})@(\\w+)\\.(\\w+)$"); 这才对。