preg_match('/^[a-z0-9]{1,25}@[a-z0-9]{1,9}(\.[a-z0-9]{2,4}){1,2}$/i', $email);大家看看这段正则怎么样,我想用来判断[email protected]这样的邮件地址也能通过验证。还有更好的写法的吗?或者是我这个有没有什么bug?

解决方案 »

  1.   

    又研究了一下,下面这个:preg_match('/^[a-z0-9_]+@[a-z0-9\-]+(\.[a-z0-9\-])+/i', $email)貌似更好,还有没有其他的?争取找到一个最好的email验证正则!
      

  2.   

    /^[a-z0-9]{1,25}@[a-z0-9]{1,9}(\.[a-z0-9]{2,4}){1,2}$/i
    有问题1、[a-z0-9]{1,25}@,首先@之前就不能出现_之类的下划线了,否则就是非法邮箱,实际上有的人合法邮箱却经常会包含_这类的下划线!还有大量使用了限定数量字符,我个人觉得真的没必要!我自己写一个供参考:
       /^\w+@\w+\.\w+(\.\w+)?$/
    //\w表示数字+字母+_出现一次或多次,然后跟@,最后的(\.\w+)?是为了适应特殊情况比如[email protected]有2个点的邮箱情况
      

  3.   

    [a-z0-9]{1,25}@光看这个,我半数的email都不能被采集,开心;但都不能在你那里用于注册马甲,伤心
      

  4.   

    /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
      

  5.   

    嗯,email验证是个大问题。。
    严格地说,这个不是一个正则就能解决的问题,随便抄几条标准的email的法则:
    ! # $ % & ' * + - / = ? ^ _ ` { | } ~  这些都是可以出现在email的local部分的(@前面的部分)
    . 也是可以的,但是不能出现在开头和结尾,不能连续出现两个, 即..
    更恶心的是,标准里还能用" "字符串,这样的格式可以用不能用的字符,比如"x y"@xxx.com,空格原是不能用的,但是在""里能....., 不过这种格式的地址估计没有几个人会用....
    域名部分需要符合域名的标准.....又是一堆法则...
    还可以用IP地址.....但是要用[]扩起来
    local部分不超过64字符,域名253字符,总长又不能超过254.....
    嗯,咳咳,有些协议里又没有这个限制,意味着可能存在超长email地址.....
    ........同学们....写写看吧......
      

  6.   

    很多人总是喜欢重复发明轮子,PHP本身就有强大的过滤函数
      

  7.   

    /^[ _a-z0-9- ]+(\.[a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/