Tagged: regex

validating email addresses with java


Test Vectors are from Wikipedia.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a
-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 38.46154%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com false
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org false
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 23.076923%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org false
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 30.769232%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com  true
                                                         admin@mailserver1  true
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 53.846157%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[a-zA-Z0-9.!#$%&'*+\-/=?\^_`{|}~]+@[a-z0-9-]+(\.[a-zA-Z0-9-]+)*$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com  true
                                                         admin@mailserver1  true
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 53.846157%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[\w.!#$%&'*+\-/=?\^`{|}~]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com  true
                                                         admin@mailserver1  true
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 53.846157%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

(?:(?:\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])*(?:[^()<>@,;:\\".\[\] \0
00-\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-\0
31]+(?:(?:(?:\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-\03
1]+(?:(?:(?:\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*)
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0]  true
                                           "much.more unusual"@example.com  true
                                  "very.unusual.@.unusual.com"@example.com  true
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com  true
                                                               postbox@com  true
                                                         admin@mailserver1  true
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org  true
                                                           " "@example.org  true
matches: 100.0%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015(
)]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040
\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\
000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"
]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\
n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\
)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\
\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n
\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<
>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x
80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\(
[^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xf
f\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80
-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\
\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+
(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^
\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\
x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\0
15()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\x
ff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x
80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?!
[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x8
0-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80
-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015(
)]*)*\)[\040\t]*)*)*|(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@
,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80
-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]*(?:(?:\([^\\\x8
0-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][
^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)|"[^\\\x80-\xff\n\015"]*(?
:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[^()<>@,;:".\\\[\]\x80-\xff\000-\010\01
2-\037]*)*<[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-
\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()
]*)*\)[\040\t]*)*(?:@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\
([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\x
ff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xf
f])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff
\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*
\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^
\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\
n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)
<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])
*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\
015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[
\040\t]*)*)*(?:,[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\
\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\
015()]*)*\)[\040\t]*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]
|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-
\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(
\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\
xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\x
ff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*
)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\(
[^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xf
f\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\04
0)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff
])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\
n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\
)[\040\t]*)*)*)*:[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\
\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n
\015()]*)*\)[\040\t]*)*)?(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040
)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\
\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|
\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\
xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^
\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\)
)[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\x
ff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^
\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\
\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)
*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[\040\t]*(?:\([^\\\x80-\xff\n\015()
]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n
\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000
-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff
\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x
80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[
^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(
?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\01
5()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\0
37\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\
015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-
\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\
\x80-\xff\n\015()]*)*\)[\040\t]*)*)*>)
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0]  true
                                           "much.more unusual"@example.com  true
                                  "very.unusual.@.unusual.com"@example.com  true
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com  true
                                                               postbox@com  true
                                                         admin@mailserver1  true
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org  true
                                                           " "@example.org  true
matches: 100.0%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2
,})
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com false
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org false
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 23.076923%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\
x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\
x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x
21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x
2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x2
3-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn-
-)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0
-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})
|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-
f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9
]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?
::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(
?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(
?:[1-9]?[0-9]))){3}))\]))$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0]  true
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com  true
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org  true
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 53.846157%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\
.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org
|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:
[0-9]{1,5})?$
--------------------------------------------------------------------------------
/valid
                                                 niceandsimple@example.com  true
                                                   very.common@example.com  true
                                a.little.lengthy.but.fine@dept.example.com  true
                            disposable.style.email.with+symbol@example.com  true
                                        user@[IPv6:2001:db8:1ff::a0b:dbd0] false
                                           "much.more unusual"@example.com false
                                  "very.unusual.@.unusual.com"@example.com false
    "very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com false
                                                               postbox@com false
                                                         admin@mailserver1 false
                                           !#$%&'*+-/=?^_`{}|~@example.org false
                        "()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org false
                                                           " "@example.org false
matches: 30.769232%
--------------------------------------------------------------------------------
/invalid
                                                           Abc.example.com false
                                                         A@b@c@example.com false
                                       a"b(c)d,e:f;g<h>i[j\k]l@example.com false
                                                just"not"right@example.com false
                                           this is"not\allowed@example.com false
                                     this\ still\"not\\allowed@example.com false
matches: 0.0%

Validating email addresses with Bean Validation


References

/**
 * The regular expression for email addresses.
 */
public static final String EMAIL_ADDRESS_REGEXP =
    "^([_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*)"
    + "@([A-Za-z0-9]+(\\.[A-Za-z0-9]+)*)"
    + "(\\.[A-Za-z]{2,})$";

/**
 * email address.
 */
@Pattern(regexp = EMAIL_ADDRESS_REGEXP)
@Size(min = 6) // a@a.us
private String emailAddress;