[kwlug-disc] PHP, email addresses and regular expressions

Robert P. J. Day rpjday at crashcourse.ca
Tue Mar 30 14:50:00 EDT 2010

  i want to write a PHP function that takes a moderately sane email
address and breaks it into its components and returns those pieces as
an array.  there are only two possibilities i will accept:

  full addresses:  "Robert P. J. Day <rpjday at crashcourse.ca>"
  short addresses: rpjday at crashcourse.ca

what i want to get back is, in both cases above, the first two
elements of the array being the username ("rpjday") and domain
("crashcourse.ca"), and *then*, in the full case, the third element of
the array will be the full name ("Robert P. J. Day").  on totally
invalid email address, NULL shall be returned.

  in a few minutes, i lashed together the following:



function break_email_into_pieces($arg)
    $full_ptn = '/^(.+) *< *(.+)@(.+)>$/';
    $short_ptn = '/^([^<]+)@([^>]+)$/';

    if (preg_match($full_ptn, $arg, $m)) {
        return array($m[2], $m[3], trim(trim($m[1]), '"'));
    } else if (preg_match($short_ptn, $arg, $m)) {
        return array($m[1], $m[2]);
    } else {
        return NULL;

$addr = 'Robert P. J. Day <rpjday at crashcourse.ca>';

$addr = '"Robert P. J. Day" <rpjday at crashcourse.ca>';

$addr = '<rpjday at crashcourse.ca>';

$addr = 'rpjday at crashcourse.ca';



  it all seems to work and i don't need the routine to be
spectacularly robust since i'm extracting the addresses from emails as
they go flying by so i can assume there's a good chance they're
RFC3696-compatible and i'm just grabbing strings out of the To: and
From: fields of those addresses.

  thoughts?  anything critical i'm missing?  any elegant improvements?
it looks good now but i'm always open to good advice.


Robert P. J. Day                               Waterloo, Ontario, CANADA

            Linux Consulting, Training and Kernel Pedantry.

Web page:                                          http://crashcourse.ca
Twitter:                                       http://twitter.com/rpjday

More information about the kwlug-disc mailing list