On 21 January 2011 11:38, a...@ashleysheridan.co.uk
<a...@ashleysheridan.co.uk> wrote:
> That won't accept dozens of different types of email addresses. It won't even 
> match some value domains.
>
> Valid email addresses can contain virtually any character in the local part 
> (although in the main they will require being inside quotation marks), and 
> the @ symbol is included in that!
>
> Thanks,
> Ash
> http://www.ashleysheridan.co.uk
>
> ----- Reply message -----
> From: "Alejandro Michelin Salomon" <amichel...@hotmail.com>
> Date: Fri, Jan 21, 2011 12:14
> Subject: RES: [PHP] email address syntax checker
> To: "'Donovan Brooke'" <li...@euca.us>
> Cc: <php-general@lists.php.net>
>
>
>
> Donovan:
>
> Try this
>
> function EmailCheck ( $sEmail )
>  {
>
> $regexp="/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z
> ]{2,}$/i";
>
>     if ( !preg_match($regexp, $sEmail) )
>        return false;
>
>     return true;
>  }
>
> Alejandro M.S.
> -----Mensagem original-----
> De: Donovan Brooke [mailto:li...@euca.us]
> Enviada em: quinta-feira, 20 de janeiro de 2011 01:14
> Para: php-general@lists.php.net
> Assunto: [PHP] email address syntax checker
>
> Hi Guys,
>
> I'm waddling my way through database interaction and thought someone on
> the list may already have a simple email checker that they'd like to
> share...
>
> you know, looking for the @ char and dots etc..
>
> I did a quick search of the archives and found a couple elaborate
> things.. but
> I'm looking for something simple. This job will have trusted users and
> the checker is more to help them catch mistakes when registering.
>
> Thanks!,
> Donovan
>
>
> --
> D Brooke
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

http://www.regular-expressions.info/email.html makes a good argument
about the futility of using JUST one massive regex to validate email
addresses.

The long and short of it is the standard says that this should work ...

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Which is ...



(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Which (using RegexBuddy) is explained as ...

Options: case insensitive; ^ and $ match at line breaks

Match the regular expression below
«(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")»
   Match either the regular expression below (attempting the next
alternative only if this one fails)
«[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*»
      Match a single character present in the list below
«[a-z0-9!#$%&'*+/=?^_`{|}~-]+»
         Between one and unlimited times, as many times as possible,
giving back as needed (greedy) «+»
         A character in the range between “a” and “z” «a-z»
         A character in the range between “0” and “9” «0-9»
         One of the characters “!#$%&'*+/=?^_`{|}” «!#$%&'*+/=?^_`{|}»
         The character “~” «~»
         The character “-” «-»
      Match the regular expression below «(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*»
         Between zero and unlimited times, as many times as possible,
giving back as needed (greedy) «*»
         Match the character “.” literally «\.»
         Match a single character present in the list below
«[a-z0-9!#$%&'*+/=?^_`{|}~-]+»
            Between one and unlimited times, as many times as
possible, giving back as needed (greedy) «+»
            A character in the range between “a” and “z” «a-z»
            A character in the range between “0” and “9” «0-9»
            One of the characters “!#$%&'*+/=?^_`{|}” «!#$%&'*+/=?^_`{|}»
            The character “~” «~»
            The character “-” «-»
   Or match regular expression number 2 below (the entire group fails
if this one fails to match)
«"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"»
      Match the character “"” literally «"»
      Match the regular expression below
«(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*»
         Between zero and unlimited times, as many times as possible,
giving back as needed (greedy) «*»
         Match either the regular expression below (attempting the
next alternative only if this one fails)
«[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]»
            Match a single character present in the list below
«[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]»
               A character in the range between ASCII character 0x01
(1 decimal) and ASCII character 0x08 (8 decimal) «\x01-\x08»
               ASCII character 0x0b (11 decimal) «\x0b»
               ASCII character 0x0c (12 decimal) «\x0c»
               A character in the range between ASCII character 0x0e
(14 decimal) and ASCII character 0x1f (31 decimal) «\x0e-\x1f»
               ASCII character 0x21 (33 decimal) «\x21»
               A character in the range between ASCII character 0x23
(35 decimal) and ASCII character 0x5b (91 decimal) «\x23-\x5b»
               A character in the range between ASCII character 0x5d
(93 decimal) and ASCII character 0x7f (127 decimal) «\x5d-\x7f»
         Or match regular expression number 2 below (the entire group
fails if this one fails to match) «\\[\x01-\x09\x0b\x0c\x0e-\x7f]»
            Match the character “\” literally «\\»
            Match a single character present in the list below
«[\x01-\x09\x0b\x0c\x0e-\x7f]»
               A character in the range between ASCII character 0x01
(1 decimal) and ASCII character 0x09 (9 decimal) «\x01-\x09»
               ASCII character 0x0b (11 decimal) «\x0b»
               ASCII character 0x0c (12 decimal) «\x0c»
               A character in the range between ASCII character 0x0e
(14 decimal) and ASCII character 0x7f (127 decimal) «\x0e-\x7f»
      Match the character “"” literally «"»
Match the character “@” literally «@»
Match the regular expression below
«(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])»
   Match either the regular expression below (attempting the next
alternative only if this one fails)
«(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?»
      Match the regular expression below
«(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+»
         Between one and unlimited times, as many times as possible,
giving back as needed (greedy) «+»
         Match a single character present in the list below «[a-z0-9]»
            A character in the range between “a” and “z” «a-z»
            A character in the range between “0” and “9” «0-9»
         Match the regular expression below «(?:[a-z0-9-]*[a-z0-9])?»
            Between zero and one times, as many times as possible,
giving back as needed (greedy) «?»
            Match a single character present in the list below «[a-z0-9-]*»
               Between zero and unlimited times, as many times as
possible, giving back as needed (greedy) «*»
               A character in the range between “a” and “z” «a-z»
               A character in the range between “0” and “9” «0-9»
               The character “-” «-»
            Match a single character present in the list below «[a-z0-9]»
               A character in the range between “a” and “z” «a-z»
               A character in the range between “0” and “9” «0-9»
         Match the character “.” literally «\.»
      Match a single character present in the list below «[a-z0-9]»
         A character in the range between “a” and “z” «a-z»
         A character in the range between “0” and “9” «0-9»
      Match the regular expression below «(?:[a-z0-9-]*[a-z0-9])?»
         Between zero and one times, as many times as possible, giving
back as needed (greedy) «?»
         Match a single character present in the list below «[a-z0-9-]*»
            Between zero and unlimited times, as many times as
possible, giving back as needed (greedy) «*»
            A character in the range between “a” and “z” «a-z»
            A character in the range between “0” and “9” «0-9»
            The character “-” «-»
         Match a single character present in the list below «[a-z0-9]»
            A character in the range between “a” and “z” «a-z»
            A character in the range between “0” and “9” «0-9»
   Or match regular expression number 2 below (the entire group fails
if this one fails to match)
«\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]»
      Match the character “[” literally «\[»
      Match the regular expression below
«(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}»
         Exactly 3 times «{3}»
         Match the regular expression below
«(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)»
            Match either the regular expression below (attempting the
next alternative only if this one fails) «25[0-5]»
               Match the characters “25” literally «25»
               Match a single character in the range between “0” and “5” «[0-5]»
            Or match regular expression number 2 below (attempting the
next alternative only if this one fails) «2[0-4][0-9]»
               Match the character “2” literally «2»
               Match a single character in the range between “0” and “4” «[0-4]»
               Match a single character in the range between “0” and “9” «[0-9]»
            Or match regular expression number 3 below (the entire
group fails if this one fails to match) «[01]?[0-9][0-9]?»
               Match a single character present in the list “01” «[01]?»
                  Between zero and one times, as many times as
possible, giving back as needed (greedy) «?»
               Match a single character in the range between “0” and “9” «[0-9]»
               Match a single character in the range between “0” and
“9” «[0-9]?»
                  Between zero and one times, as many times as
possible, giving back as needed (greedy) «?»
         Match the character “.” literally «\.»
      Match the regular expression below
«(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)»
         Match either the regular expression below (attempting the
next alternative only if this one fails) «25[0-5]»
            Match the characters “25” literally «25»
            Match a single character in the range between “0” and “5” «[0-5]»
         Or match regular expression number 2 below (attempting the
next alternative only if this one fails) «2[0-4][0-9]»
            Match the character “2” literally «2»
            Match a single character in the range between “0” and “4” «[0-4]»
            Match a single character in the range between “0” and “9” «[0-9]»
         Or match regular expression number 3 below (attempting the
next alternative only if this one fails) «[01]?[0-9][0-9]?»
            Match a single character present in the list “01” «[01]?»
               Between zero and one times, as many times as possible,
giving back as needed (greedy) «?»
            Match a single character in the range between “0” and “9” «[0-9]»
            Match a single character in the range between “0” and “9” «[0-9]?»
               Between zero and one times, as many times as possible,
giving back as needed (greedy) «?»
         Or match regular expression number 4 below (the entire group
fails if this one fails to match)
«[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+»
            Match a single character present in the list below «[a-z0-9-]*»
               Between zero and unlimited times, as many times as
possible, giving back as needed (greedy) «*»
               A character in the range between “a” and “z” «a-z»
               A character in the range between “0” and “9” «0-9»
               The character “-” «-»
            Match a single character present in the list below «[a-z0-9]»
               A character in the range between “a” and “z” «a-z»
               A character in the range between “0” and “9” «0-9»
            Match the character “:” literally «:»
            Match the regular expression below
«(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+»
               Between one and unlimited times, as many times as
possible, giving back as needed (greedy) «+»
               Match either the regular expression below (attempting
the next alternative only if this one fails)
«[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]»
                  Match a single character present in the list below
«[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]»
                     A character in the range between ASCII character
0x01 (1 decimal) and ASCII character 0x08 (8 decimal) «\x01-\x08»
                     ASCII character 0x0b (11 decimal) «\x0b»
                     ASCII character 0x0c (12 decimal) «\x0c»
                     A character in the range between ASCII character
0x0e (14 decimal) and ASCII character 0x1f (31 decimal) «\x0e-\x1f»
                     A character in the range between ASCII character
0x21 (33 decimal) and ASCII character 0x5a (90 decimal) «\x21-\x5a»
                     A character in the range between ASCII character
0x53 (83 decimal) and ASCII character 0x7f (127 decimal) «\x53-\x7f»
               Or match regular expression number 2 below (the entire
group fails if this one fails to match)
«\\[\x01-\x09\x0b\x0c\x0e-\x7f]»
                  Match the character “\” literally «\\»
                  Match a single character present in the list below
«[\x01-\x09\x0b\x0c\x0e-\x7f]»
                     A character in the range between ASCII character
0x01 (1 decimal) and ASCII character 0x09 (9 decimal) «\x01-\x09»
                     ASCII character 0x0b (11 decimal) «\x0b»
                     ASCII character 0x0c (12 decimal) «\x0c»
                     A character in the range between ASCII character
0x0e (14 decimal) and ASCII character 0x7f (127 decimal) «\x0e-\x7f»
      Match the character “]” literally «\]»


But really?


-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to