At a quick glance, it appears to me the false/true logic is inverted: if the eregi() returns true, then you want to set the $email value and set $e = true.
Also, the regex has some flaws. For instance, it will not allow the valid address "john.doe@somewhere.com", while it will allow the invalid "foobar@somewhere.com.....".
FWIW, here's the function I use (see http://iamcal.com/publish/articles/php/parsing_email/ for more info about it). It returns 1 if $email is a valid format, else 0.
# email address validation function
# kudos to http://iamcal.com/publish/articles/php/parsing_email/
function is_valid_email_address($email) {
$qtext = '[^\\x0d\\x22\\x5c\\xa6-\\xff]';
$dtext = '[^\\x0d\\x5b-\\x5d\\xa6-\\xff]';
$atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c'.
'\\x3e\\x40\\x5b-\\x5d\\xa6-\\xff]+';
$quoted_pair = '\\x5c[\\x00-\\xa5]';
$domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d";
$quoted_string = "\\x22($qtext|$quoted_pair)*\\x22";
$domain_ref = $atom;
$sub_domain = "($domain_ref|$domain_literal)";
$word = "($atom|$quoted_string)";
$domain = "$sub_domain(\\x2e$sub_domain)*";
$local_part = "$word(\\x2e$word)*";
$addr_spec = "$local_part\\x40$domain";
return (preg_match("!^$addr_spec$!", $email));
}