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

解决方案 »

  1.   

    用filter,不用想正则想到头大
    另外去除前后空格可以用trim()Example #1 Validating email addresses with filter_var()<?php
    $email_a = '[email protected]';
    $email_b = 'bogus';if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
        echo "This (email_a) email address is considered valid.";
    }
    if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
        echo "This (email_b) email address is considered valid.";
    }
    ?> Example #1 Sanitizing and validating email addresses<?php
    $a = '[email protected]';
    $b = 'bogus - at - example dot org';
    $c = '([email protected])';$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL);
    if (filter_var($sanitized_a, FILTER_VALIDATE_EMAIL)) {
        echo "This (a) sanitized email address is considered valid.\n";
    }$sanitized_b = filter_var($b, FILTER_SANITIZE_EMAIL);
    if (filter_var($sanitized_b, FILTER_VALIDATE_EMAIL)) {
        echo "This sanitized email address is considered valid.";
    } else {
        echo "This (b) sanitized email address is considered invalid.\n";
    }$sanitized_c = filter_var($c, FILTER_SANITIZE_EMAIL);
    if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) {
        echo "This (c) sanitized email address is considered valid.\n";
        echo "Before: $c\n";
        echo "After:  $sanitized_c\n";    
    }
    ?> 
    以上例程会输出:This (a) sanitized email address is considered valid.
    This (b) sanitized email address is considered invalid.
    This (c) sanitized email address is considered valid.
    Before: ([email protected])
    After: [email protected]
      

  2.   

    preg_match('/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/',trim($filename))
      

  3.   

    <?php
    $email = "someone@exa mple.com";if(!filter_var($email, FILTER_VALIDATE_EMAIL))
     {
     echo "E-mail is not valid";
     }
    else
     {
     echo "E-mail is valid";
     }
    ?>
      

  4.   

    你可以参考这里
    http://www.w3school.com.cn/php/php_ref_filter.asp
      

  5.   

    我刚才才重新做了一个循环10000次的实验,发现下边的这个例子用时60毫秒,
    IF(Preg_match("/^[[:alnum:]._-]+@[[:alnum:]-]+\.([[:alnum:]-]+\.)*[[:alnum:]]+$/isU",$??)){
    Echo "Email地址合法.";
    }而这下边的这个用时为200毫秒
    IF(Filter_var($??,FILTER_VALIDATE_EMAIL)){
    Echo "Email地址合法.";
    }由此可见在判断email地址的合法性上,正则表达式的效率反而比Filter_var函数的效率要高很多,所以就看你要如何取舍了.