In the PEAR collection there is an RFC822-compliant address validator. Further checking beyond what is done there will be needed to see if the top-level domain is recognised (two-letter nation code or one of .com, .mil, .museum, etc.).
URL checking can be done with parse_url() and seeing if the resulting bits are valid.
I was thinking about a single RFC822 regexp, but research got me only as far as
(?๐?:\r\n)?[ \t])(?๐?๐?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))|(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))<(?๐?:\r\n)?[ \t])(?:@(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))(?:,@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))))๐?๐?:\r\n)?[ \t]))?(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))>(?๐?:\r\n)?[ \t]))|(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))๐?๐?:\r\n)?[ \t])(?๐?๐?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))|(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))<(?๐?:\r\n)?[ \t])(?:@(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))(?:,@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))))๐?๐?:\r\n)?[ \t]))?(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))>(?๐?:\r\n)?[ \t]))(?:,\s(?๐?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))|(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))<(?๐?:\r\n)?[ \t])(?:@(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([[]\r\]|\.)](?๐?:\r\n)?[ \t])))(?:,@(?๐?:\r\n)?[ \t])(?:[()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([^[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[^()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([^[]\r\]|\.)](?๐?:\r\n)?[ \t]))))๐?๐?:\r\n)?[ \t]))?(?:[^()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[^()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|"(?:[^\"\r\]|\.|(?๐?:\r\n)?[ \t]))"(?๐?:\r\n)?[ \t])))@(?๐?:\r\n)?[ \t])(?:[^()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([^[]\r\]|\.)](?๐?:\r\n)?[ \t]))(?:.(?๐?:\r\n)?[ \t])(?:[^()<>@,;:\".[] \000-\031]+(?๐?๐?:\r\n)?[ \t])+|\Z|(?=[["()<>@,;:\".[]]))|[([^[]\r\]|\.)](?๐?:\r\n)?[ \t])))>(?๐?:\r\n)?[ \t]))))?;\s)
and it still does't cover things like comment strings. Needless to say, a staged approach like that used in PEAR's Mail/RFC822.php library is a better way to go. It depends on how careful you want to be.