/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - 2 0 2 0 Ġby ĠO liver ĠBo e hm Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* Ġ( c ) re ated Ġ 2 3 . 0 6 . 2 0 1 7 Ġby Ġo bo e hm Ġ( ob @ o asd . de ) Ċ Ġ*/ Ċ package Ġde . jf ach w ert . net Ċ Ċ import Ġde . jf ach w ert . K Simple Validator Ċ import Ġde . jf ach w ert . Text Ċ import Ġde . jf ach w ert . post . Name Ċ import Ġde . jf ach w ert . pr ue fung . Null Validator Ċ import Ġde . jf ach w ert . pr ue fung . exception . Invalid Value Exception Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġorg . apache . commons . text . Word Utils Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* ĠE ine ĠE - Mail - Ad resse Ġist Ġdie Ġein de ut ige ĠAbs ender - Ġund ĠEmp fa enger ad resse Ġim Ċ Ġ* ĠE - Mail - Ver ke hr . ĠSie Ġbest e ht Ġaus Ġz wei ĠTe ilen , Ġdie Ġdurch Ġein Ġ@ - Ze ichen Ċ Ġ* Ġv one in ander Ġget ren nt Ġsind : Ċ Ġ* Ġ Ġ* ĠDer Ġlok ale ĠTe il , Ġim ĠEng lis chen Ġlocal - part Ġgen an nt , Ċ Ġ* ĠĠĠ Ġste ht Ġvor Ġdem Ġ@ - Ze ichen . Ċ Ġ* Ġ Ġ* ĠDer Ġglob ale ĠTe il , Ġim ĠEng lis chen Ġdomain - part Ġgen an nt , Ċ Ġ* ĠĠĠ Ġste ht Ġnach Ġdem Ġ@ - Ze ichen . Ċ Ġ* Ċ Ġ* ĠBe i Ġder ĠE - Mail - Ad resse Ġ" email @ example . com " Ġist Ġ" email " Ġder Ġlok ale ĠTe il Ċ Ġ* Ġund Ġ" example . com " Ġder Ġglob ale ĠTe il . Ċ Ġ* Ċ Ġ* Ġ@ author Ġo bo e hm Ċ Ġ* Ġ@ since Ġ 0 . 3 Ġ( 2 3 . 0 6 . 2 0 1 7 ) Ċ Ġ*/ Ċ open Ġclass ĠE Mail Ad resse Ċ /** Ċ Ġ* ĠLe gt Ġeine ĠInst anz Ġeiner ĠE Mail Ad resse Ġan . ĠDer ĠValidator Ġist Ċ Ġ* Ġh au pt sa ech lich Ġf uer Ġab ge le it ete ĠK lass en Ġge d acht , Ġdie Ġih re Ġeig ene Ċ Ġ* ĠValid ierung Ġmit Ġein br ingen Ġw ol len Ġoder Ġaus ĠPerformance - G ru enden Ċ Ġ* Ġab sch al ten Ġw ol len . Ċ Ġ* Ċ Ġ* Ġ@ param Ġemail Ad resse Ġeine Ġg ue lt ige ĠAd resse , Ġz . B . Ġ" max @ m uster mann . de " Ċ Ġ* Ġ@ param Ġvalidator ĠĠĠ ĠSimple Validator Ġzur ĠAd ress en - Valid ierung Ċ Ġ*/ Ċ @ Jvm Over loads Ġconstructor ( email Ad resse : ĠString , Ġvalidator : ĠK Simple Validator < String > Ġ= ĠVALID ATOR ) Ġ: ĠText ( validator . verify ( email Ad resse )) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAls ĠLocal ĠPart Ġwird Ġder ĠTe il Ġeiner ĠE - Mail - Ad resse Ġbe zeich net , Ġder Ġdie ĊĠĠĠĠ Ġ* ĠAd resse Ġinner hal b Ġder ĠDomain Ġdes ĠE - Mail - Providers Ġein de ut ig Ġbe zeich net . ĊĠĠĠĠ Ġ* ĠTyp is cher weise Ġent sp richt Ġder ĠL ok al te il Ġdem ĠBen utz ern amen Ġ( h ae u fig Ġein ĊĠĠĠĠ Ġ* ĠP seud onym ) Ġdes ĠBes itz ers Ġdes ĠE - Mail - Kont os . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġz . B . Ġ" Max . M uster mann " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlocal Part : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠStringUtils . substring Before Last ( code , Ġ"@ ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDer ĠDomain ĠPart , Ġder Ġh inter Ġdem Ġ@ - Ze ichen Ġste ht Ġund Ġf uer Ġden Ġdie ĊĠĠĠĠ Ġ* ĠSyntax re ge ln Ġdes ĠDomain ĠName ĠSystems Ġge lt en , Ġbest e ht Ġmin dest ens Ġaus Ġd rei ĊĠĠĠĠ Ġ* ĠTe ilen : Ġeinem ĠHost n amen Ġ( z . ĠB . Ġein ĠF irm en name ), Ġeinem ĠP unkt Ġund Ġeiner ĊĠĠĠĠ Ġ* ĠTop - Level - Domain . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġz . B . Ġ" f ach w ert . de " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdomain Part : ĠDomain name ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDomain name ( StringUtils . substring After Last ( code , Ġ"@ ")) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠL ief ert Ġden ĠNam ens ante il Ġder ĠEmail - Ad resse Ġals Ġ[ Name ] Ġzur ue ck . ĊĠĠĠĠ Ġ* ĠK ann Ġdann Ġe inge set zt Ġwerden , Ġwenn Ġdie ĠEmail - Ad resse Ġnach Ġdem ĠSchema ĊĠĠĠĠ Ġ* Ġ" vor name . n ach name @ fir ma . de " Ġauf ge ba ut Ġist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġz . B . Ġ" O . ĠBo e hm " Ġals ĠName ĊĠĠĠĠ Ġ* Ġ@ since Ġ 2 . 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠName ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠWord Utils . capitalize ( local Part , Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠName . of ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDie ĠK lasse ĠE Mail Validator Ġvalid iert Ġvor ne hm lich ĠE - Mail - Ad ress en . ĊĠĠĠĠ Ġ* ĠU rsp ru eng lich Ġwar Ġer Ġeine Ġseparate ĠK lasse , Ġmit Ġv 2 . 2 Ġwurde Ġer Ġan o log ĊĠĠĠĠ Ġ* Ġzu Ġden Ġand eren ĠValid atore n Ġzur Ġent sp rech enden ĠK lasse Ġals Ġinn ere ĠK lasse ĊĠĠĠĠ Ġ* Ġversch ob en . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author Ġo bo e hm ĊĠĠĠĠ Ġ* Ġ@ since Ġ 0 . 3 Ġ( 2 7 . 0 6 . 2 0 1 7 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠValidator ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDies er ĠKon str uk tor Ġist Ġf uer Ġab ge le it ete ĠK lass en Ġge d acht , Ġdie Ġdas ĠPattern ĊĠĠĠĠĠĠĠĠ Ġ* Ġf uer Ġdie ĠAd ress - Valid ierung Ġue bers ch reib en Ġmo ech ten . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġaddress Pattern ĠPattern Ġf uer Ġdie ĠAd ress - Val ider ung ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprotected Ġconstructor ( private Ġval Ġaddress Pattern : ĠPattern ) Ġ: ĠK Simple Validator < String > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠH ier Ġwird Ġder ĠE - Mail - Simple Validator Ġmit Ġein erm ĠPattern Ġvon ĊĠĠĠĠĠĠĠĠ Ġ* Ġhttps :// www . mk y ong . com / regular - expressions / how - to - validate - email - address - with - regular - expression / ĊĠĠĠĠĠĠĠĠ Ġ* Ġauf ge set zt . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconstructor () Ġ: Ġthis ( Pattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compile ("^ [_ A - Za - z 0 - 9 -+ ]+ ( \\. [_ A - Za - z 0 - 9 - ]+ )* @ [ A - Za - z 0 - 9 - ]+ (\\ .[ A - Za - z 0 - 9 ]+ )*( \\ .[ A - Za - z ]{ 2 , }) $ ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠF ue hrt Ġein ĠPattern - bas ierte ĠPr ue fung Ġder Ġue be geben en ĠE - Mail - Ad resse ĊĠĠĠĠĠĠĠĠ Ġ* Ġdurch . ĠSch la e gt Ġdie ĠPr ue fung Ġfe hl , Ġwird Ġeine ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ javax . validation . ValidationException ] Ġge wor fen . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġzu Ġpr ue f ende ĠE - Mail - Ad resse ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġdie Ġvalid ierte ĠE - Mail - Ad resse Ġ( z ur ĠWe iter ver ar beit ung ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvalidate ( value : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġaddress Pattern . matcher ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Value Exception ( value , Ġ" email _ address ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVALID ATOR : ĠK Simple Validator < String > Ġ= ĠValidator () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWE AK _ CACHE Ġ= ĠWeak HashMap < String , ĠE Mail Ad resse >() ĊĠĠĠĠĠĠĠ Ġ/** ĠNull - Kon st ante Ġf uer ĠInitial is ier ungen . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠNULL Ġ= ĠE Mail Ad resse ("", ĠNull Validator ()) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠL ief ert Ġeinen ĠEmail Ad resse . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġname Ġg ue lt ige ĠEmail - Ad resse ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠE Mail Ad resse ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġof ( name : ĠString ): ĠE Mail Ad resse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWE AK _ CACHE . compute If Absent ( name ) Ġ{ Ġemail Ad resse : ĠString Ġ-> ĠE Mail Ad resse ( email Ad resse ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }