Thursday, March 04, 2010

Extract display name from email address


/*
$tomatch = array('Name Surname ','name.surname@blah.com','"b. blah"@blah.co.nz','Some guy <"b. blah"@blah.co.nz>');

foreach ($tomatch as $email) {
print_r(extract_display_name_email($email));
}

*/

function extract_display_name_email($str){
$str = trim($str);
$pos = strrpos($str, '@');
if(false === $pos) return false;

//spaces inside the display name !
if('"' == $str[$pos-1]){
$newpos = strrpos(substr($str, 0, $pos - 1), '"');
if(0 === $newpos) {
$newpos = false; //no display name
}else{
$newpos = strrpos(substr($str, 0, $newpos - 1), ' '); //find last space before "
}
}else{
$newpos = strrpos($str, ' '); //if false then there is no display name
}

if($newpos !== false){
$displayname = trim(substr($str, 0, $newpos));
$email = trim(substr($str, $newpos));
}else{
$displayname = '';
$email = $str;
}
if($email[0] == '<') $email = substr($email, 1, -1); //strip <>
if(strlen($displayname) && $displayname[0] == '"') $displayname = substr($displayname, 1, -1); //strip "

return array('email'=>$email, 'displayname'=>$displayname);
}