需求如下:
在用户注册时,需验证用户名必须是有效的手机号码或者是有效的邮箱地址。邮箱:^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
手机:^1[0-9]{10}$我就把把两个正则表达式合并:^1[0-9]{10}|\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
但用这个/^1[0-9]{10}|\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test('11111111111111111111111111111111111111111111111111111111')既然返回true!这是为什么呀?请高手赐教还有就是,邮箱地址能不能限制整个长度不能超过50个字符呢?

解决方案 »

  1.   

    /(^1[0-9]{10}$)|(^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$)/.test('11111111111111111111111111111111111111111111111111111111')
      

  2.   

    邮箱地址能不能限制整个长度不能超过50个字符呢?
    这个可以正则验证之后再用length验证一次
      

  3.   

    +++ 或者你就分别判断两次 只要其中一个验证返回true就OK了,这样就少些一个正则
      

  4.   

      
    <input type="text"  maxlength="50"   />
      

  5.   

    先正则验证一次 再用str.length<=50验证一次
      

  6.   

    我知道 str.length 的判断,但是程序结构限制,必须是在一个正则表达式中完成。
      

  7.   

    你这样就可以了,这个问题我以前也碰到过:
    alert(/^(1[0-9]{10}|\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+))*$/.test('11111111111111111111111111111111111111111111111111111111'));
    你原来正则表达的意思是以数字开头或者以邮箱结尾,那1111111...就是以数字开头的,肯定返回true,所以加个括号表示这是个整体就可以了