I'm looking to switch eregi to preg_match as it's faster, found these two patterns on the web, not sure now which is better (the first one is from preg_match manual page as a comment, improved it a bit):
$pattern1 = '/[a-z0-9!#$%&+-=?_{|}~]+(\.[a-z0-9!#$%&*+-=?^_{|}~]+)@([-a-z0-9]+.)+([a-z]{2,3}|info|arpa|aero|coop|name|mobi|museum)$/ix';
$pattern2 = '/[\x00-\x20()<>@,;:\".[]\x7f-\xff]+(?:.[\x00-\x20()<>@,;:\".[]\x7f-\xff]+)*@[\x00-\x20()<>@,;:\".[]\x7f-\xff]+(?:.[\x00-\x20()<>@,;:\".[]\x7f-\xff]+)+$/i';