package Ġcom . w aj ah at kar im 3 . easy validation . core Ċ Ċ import Ġcom . w aj ah at kar im 3 . easy validation . core . rules .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ Ċ /** Ċ Ġ* ĠThe Ġcore ĠValidator Ġbuilder Ġclass Ġfor Ġvalidation Ġoperations Ġand Ġchecks ! Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġallows Ġdevelopers Ġto Ġprocess Ġsingle Ġor Ġmultiple Ġvalidation Ġchecks Ġon Ġinput Ġviews . Ċ Ġ* Ċ Ġ* Ġ@ author ĠW aj ah at ĠKar im Ċ Ġ* Ġ@ date Ġ 0 8 / 0 5 / 1 8 Ċ Ġ*/ Ċ class ĠValidator ( val Ġtext : ĠString ) Ċ { ĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠBoolean Ġto Ġdetermine Ġwhether Ġall Ġthe Ġvalidations Ġhave Ġpassed Ġsuccessfully ! ĊĠĠĠĠ Ġ* ĠIf Ġany Ġvalidation Ġcheck Ġis Ġfailed , Ġthen Ġthe Ġvalue Ġto ĊĠĠĠĠ Ġ* Ġfalse Ġand Ġresult Ġis Ġreturned Ġto Ġdeveloper ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar ĠisValid Ġ= Ġtrue ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ ĠThe Ġerror Ġmessage Ġto Ġbe Ġsent Ġin Ġthe Ġerror Ġcallback ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar ĠerrorMessage : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠIn Ġcase Ġof Ġvalidation Ġerror Ġor Ġfailure , Ġthis Ġcallback Ġis Ġinvoked ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġerror Callback : Ġ(( message : ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠIn Ġcase Ġof Ġvalidation Ġsuccess , Ġthis Ġcallback Ġis Ġinvoked ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsuccess Callback : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠThe Ġrules Ġlist Ġto Ġcheck Ġfor Ġvalidation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġrules List Ġ= ĠArrayList < Base Rule >() ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠPerforms Ġthe Ġvalidation Ġcheck Ġand Ġreturns Ġtrue Ġor Ġfalse . ĊĠĠĠĠ Ġ* ĠAlso Ġinvokes Ġsuccess Ġand Ġerror Ġcallbacks Ġif Ġnon Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck () Ġ: ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( rule Ġin Ġrules List ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! rule . validate ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetError ( rule . get ErrorMessage ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠInv oking Ġcallbacks ĊĠĠĠĠĠĠĠ Ġif Ġ( isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Callback ?. invoke () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Callback ?. invoke ( errorMessage ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠisValid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetError ( message : ĠString ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠisValid Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠerrorMessage Ġ= Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Rule ( rule : ĠBase Rule ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġrules List . add ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Error Callback ( callback : Ġ( message : ĠString ) Ġ-> ĠUnit ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Success Callback ( callback : Ġ() Ġ-> ĠUnit ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuccess Callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRules ĊĠĠĠ Ġfun Ġnon Empty ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Non Empty Rule ( error Msg )} ?: ĠNon Empty Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmin Length ( length : ĠInt , error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Min Length Rule ( length , error Msg )} ?: ĠMin Length Rule ( length ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠmaxLength ( length : ĠInt , error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ MaxLength Rule ( length , error Msg )} ?: ĠMax Length Rule ( length ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalid Email ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Email Rule ( error Msg )} ?: ĠEmail Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalid Number ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Valid Number Rule ( error Msg )} ?: ĠValid Number Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgreater Than ( number : ĠNumber , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ GreaterThan Rule ( number , error Msg )} ?: ĠG reater Than Rule ( number ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgreater Than OrEqual ( number : ĠNumber , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ GreaterThan OrEqual Rule ( number , error Msg )} ?: ĠG reater Than OrEqual Rule ( number ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġless Than ( number : ĠNumber , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ LessThan Rule ( number , error Msg )} ?: ĠLess Than Rule ( number ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġless Than OrEqual ( number : ĠNumber , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ LessThan OrEqual Rule ( number , error Msg )} ?: ĠLess Than OrEqual Rule ( number ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnumber EqualTo ( number : ĠNumber , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Number EqualTo Rule ( number , error Msg )} ?: ĠNumber EqualTo Rule ( number ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall LowerCase ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ All LowerCase Rule ( error Msg )} ?: ĠAll LowerCase Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġall UpperCase ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ All U perc Case Rule ( error Msg )} ?: ĠAll U perc Case Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġat least One UpperCase ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ At Least One U perc Case Rule ( error Msg )} ?: ĠAt Least One U perc Case Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġat least One LowerCase ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ At Least One LowerCase Rule ( error Msg )} ?: ĠAt Least One LowerCase Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġat least One Number ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ At Least One Number Case Rule ( error Msg )} ?: ĠAt Least One Number Case Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġno Numbers ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ No Numbers Rule ( error Msg )} ?: ĠNo Numbers Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġonly Numbers ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Only Numbers Rule ( error Msg )} ?: ĠOnly Numbers Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart With Number ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ StartsWith Number Rule ( error Msg )} ?: ĠStart sWith Number Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart With Non Number ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ StartsWith No Number Rule ( error Msg )} ?: ĠStart sWith No Number Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġno Special Characters ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ No Special Character Rule ( error Msg )} ?: ĠNo Special Character Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġat least One Special Characters ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ At least One Special Character Rule ( error Msg )} ?: ĠAt least One Special Character Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtext EqualTo ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Text EqualTo Rule ( target , error Msg )} ?: ĠText EqualTo Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtext Not EqualTo ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Text Not EqualTo Rule ( target , error Msg )} ?: ĠText Not EqualTo Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart sWith ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ StartsWith Rule ( target , error Msg )} ?: ĠStart sWith Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġend sWith ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ EndsWith Rule ( target , error Msg )} ?: ĠEnd sWith Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Contains Rule ( target , error Msg )} ?: ĠContains Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnot Contains ( target : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Not Contains Rule ( target , error Msg )} ?: ĠNot Contains Rule ( target ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcredit Card Number ( credit Card ErrorMsg : String ? Ġ= Ġnull , min Length ErrorMsg : String ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength ErrorMsg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Length Rule Ġ= Ġmin Length ErrorMsg ?. let Ġ{ Min Length Rule ( 1 6 , min Length ErrorMsg )} ?: ĠMin Length Rule ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Rule Ġ Ġ= ĠmaxLength ErrorMsg ?. let Ġ{ MaxLength Rule ( 1 6 , maxLength ErrorMsg )} ?: ĠMax Length Rule ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġcredit Card Rule Ġ= Ġcredit Card ErrorMsg ?. let Ġ{ CreditCard Rule ( credit Card ErrorMsg )} ?: ĠCredit Card Rule () ĊĊĠĠĠĠĠĠĠ Ġadd Rule ( min Length Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( maxLength Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( credit Card Rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcredit Card Number With Spaces ( credit Card ErrorMsg : String ? Ġ= Ġnull , min Length ErrorMsg : String ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength ErrorMsg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Length Rule Ġ= Ġmin Length ErrorMsg ?. let Ġ{ Min Length Rule ( 1 6 , min Length ErrorMsg )} ?: ĠMin Length Rule ( 1 9 ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Rule Ġ Ġ= ĠmaxLength ErrorMsg ?. let Ġ{ MaxLength Rule ( 1 6 , maxLength ErrorMsg )} ?: ĠMax Length Rule ( 1 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġcredit Card Rule Ġ= Ġcredit Card ErrorMsg ?. let Ġ{ CreditCard With Spaces Rule ( credit Card ErrorMsg )} ?: ĠCredit Card With Spaces Rule () ĊĊĠĠĠĠĠĠĠ Ġadd Rule ( min Length Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( maxLength Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( credit Card Rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcredit Card Number With D ashes ( credit Card ErrorMsg : String ? Ġ= Ġnull , min Length ErrorMsg : String ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxLength ErrorMsg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Length Rule Ġ= Ġmin Length ErrorMsg ?. let Ġ{ Min Length Rule ( 1 6 , min Length ErrorMsg )} ?: ĠMin Length Rule ( 1 9 ) ĊĠĠĠĠĠĠĠ Ġval ĠmaxLength Rule Ġ Ġ= ĠmaxLength ErrorMsg ?. let Ġ{ MaxLength Rule ( 1 6 , maxLength ErrorMsg )} ?: ĠMax Length Rule ( 1 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġcredit Card Rule Ġ= Ġcredit Card ErrorMsg ?. let Ġ{ CreditCard With D ashes Rule ( credit Card ErrorMsg )} ?: ĠCredit Card With D ashes Rule () ĊĊĠĠĠĠĠĠĠ Ġadd Rule ( min Length Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( maxLength Rule ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( credit Card Rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalid Url ( error Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Valid Url Rule ( error Msg )} ?: ĠValid Url Rule () ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregex ( pattern : ĠString , Ġerror Msg : String ? Ġ= Ġnull ) Ġ: ĠValidator ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġerror Msg ?. let Ġ{ Regex Rule ( pattern , error Msg )} ?: ĠRegex Rule ( pattern ) ĊĠĠĠĠĠĠĠ Ġadd Rule ( rule ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ }