I have replaced phone validation functions in contact scripts as seems to work better with a range of different US phone numbers..

function VALIDATE_USPHONE($phonenumber,$useareacode=true)
{
if ( preg_match("/^[ ]*[(]{0,1}[ ]*[0-9]{3,3}[ ]*[)]{0,1}[-]{0,1}[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/",$phonenumber) || (preg_match("/^[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/",$phonenumber) && !$useareacode)) return eregi_replace("[^0-9]", "", $phonenumber);
if ( preg_match("/^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$/",$phonenumber) ) return eregi_replace("[^0-9]", "", $phonenumber);
if ( (strlen(eregi_replace("[^0-9]", "", $phonenumber))>=6)&&(strlen(eregi_replace("[^0-9]", "", $phonenumber))<=16) ) return eregi_replace("[^0-9]", "", $phonenumber);
return false;
}