Hi,

On Tue, 9 Dec 2003, Lucas Gonze wrote:

> I added '+' character to the list of allowed chars in on the left side
> of an email address.  This permits email addresses like
> [EMAIL PROTECTED], which some people use to flag the source of spam.
>
> New code:
> function COM_isemail( $email )
> {
>      if( eregi(
> "^([-_0-9a-z+])+([-._0-9a-z+])[EMAIL PROTECTED]([-.]?[0-9a-z])*.[a-z]{2,3}$",
> $email, $check ))
>         // was:
>         // if( eregi(
> "^([-_0-9a-z])+([-._0-9a-z])[EMAIL PROTECTED]([-.]?[0-9a-z])*.[a-z]{2,3}$",
> $email, $check ))
>      {
>          return TRUE;
>      }
>      else
>      {
>          return FALSE;
>      }
> }

You can reduce your regex to:

"[EMAIL PROTECTED]([-.]?[0-9a-z])*.[a-z]{2,3}$",

I've stripped out some of the unnecessary parens. I'm not sure if you want
to allow addresses of the format [EMAIL PROTECTED], but that's
technically allowed.

Here's what I'm using:

    if( eregi(
"[EMAIL PROTECTED]([-.]?[0-9a-z])*\\.[a-z]{2,6}$",
$email, $check))

Breaking it down, here's what it does:

"^[-_0-9a-z]            # starts with one of [-_0-9a-z]
[-_.0-9a-z]*            # followed by 0 or more of [-_.0-9a-z]
\\+?                    # then 0 or 1 '+'
[-_.0-9a-z]*            # then 0 or more of [-_.0-9a-z]
@[0-9a-z]               # then '@' followed by one of [0-9a-z]
([-.]?[0-9a-z])*        # then 0 or more of ( 0 or 1 of [-.]
                        # and 1 of [0-9a-z])
\\.                     # a literal '.'
[a-z]{2,6}$"            # terminated with 2-6 of [a-z]

The major differences are that I only allow one '+' (technically you can
have more but most people only use one), the [something][otherthing]*
pattern is better behaved than [something]+[otherthing]* because the regex
engine doesn't backtrack as much (this matters when [something] and
[otherthing] are very similar; it's an efficiency tweak), and the TLD is
from 2-6 characters rather than 2-3, taking into account the new longer
TLDs .aero, .coop, and .museum (not that these matter much in practice but
they are legal.)

I still haven't found the time to implement a more robust email address
validator in PEAR's Mail module. Brave people should look at
http://www.faqs.org/rfcs/rfc822.html to see the pain involved in parsing
email addresses.

hth,

-- 
Bob Apthorpe

Reply via email to