package Ġcom . example . wan Android . widget . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . text . Input Filter Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroidx . appcompat . widget . AppCompat EditText Ċ import Ġcom . example . wan Android . R Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: ĠAndroid Ġ è½® åŃĲ åĵ ¥ Ċ Ġ* Ċ Ġ* Ġgithub Ġ: Ġhttps :// github . com / getActivity / Android Project - Kotlin Ċ Ġ* Ċ Ġ* Ġtime Ġ: Ġ 2 0 1 9 / 0 6 / 2 9 Ċ Ġ* Ċ Ġ* Ġdesc Ġ: Ġ æŃ£ åĪĻ è¾ĵåħ¥ éĻĲåĪ¶ ç¼ĸè¾ĳ æ¡Ĩ Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ", Ġ" unused ") Ċ open Ġclass ĠRegex EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġandroid . R . attr . edit TextStyle Ċ ) Ġ: ĠAppCompat EditText ( context , Ġattrs , Ġdef Style Attr ), ĠInput Filter Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ æīĭæľº åı· ï¼Ī åıªèĥ½ ä»¥ Ġ 1 Ġ å¼Ģ å¤´ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ MOB ILE : ĠString Ġ= Ġ"[ 1 ]\\ d { 0 , 1 0 }" ĊĊĠĠĠĠĠĠĠ Ġ/** Ġä¸Ń æĸĩ ï¼Ī æĻ®éĢļ çļĦ ä¸Ńæĸĩ åŃĹç¬¦ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ CH INE SE : ĠString Ġ= Ġ"[ \\ u 4 e 0 0 - \\ u 9 fa 5 ]* " ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ èĭ± æĸĩ ï¼Ī å¤§ åĨĻ åĴĮ å°ı åĨĻ çļĦ èĭ± æĸĩ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ EN GL ISH : ĠString Ġ= Ġ"[ a - zA - Z ]* " ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ æķ°åŃĹ ï¼Ī åıª åħģè®¸ è¾ĵåħ¥ çº ¯ æķ°åŃĹ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ NUMBER : ĠString Ġ= Ġ"\\ d *" ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ è®¡ æķ° ï¼Ī éĿŀ Ġ 0 Ġ å¼Ģ å¤´ çļĦ æķ°åŃĹ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ COUNT : ĠString Ġ= Ġ"[ 1 - 9 ]\\ d *" ĊĊĠĠĠĠĠĠĠ Ġ/** ĠçĶ¨æĪ· åĲį ï¼Ī ä¸Ńæĸĩ ãĢģ èĭ± æĸĩ ãĢģ æķ°åŃĹ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ NAME : ĠString Ġ= Ġ"[ [ \\ u 4 e 0 0 - \\ u 9 fa 5 ] |[ a - zA - Z ]| \\ d ]* " ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ éĿŀ ç©º æł¼ çļĦ åŃĹç¬¦ ï¼Ī ä¸įèĥ½ è¾ĵåħ¥ ç©º æł¼ ï¼ī Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREG EX _ NONNULL : ĠString Ġ= Ġ"\\ S +" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ æŃ£ åĪĻ è¡¨è¾¾å¼ı è§ĦåĪĻ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpattern : ĠPattern ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠTyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Regex EditText ) ĊĠĠĠĠĠĠĠ Ġif Ġ( array . hasValue ( R . style able . Regex EditText _ input Regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Input Regex ( array . getString ( R . style able . Regex EditText _ input Regex )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( array . hasValue ( R . style able . Regex EditText _ regex Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( array . getInt ( R . style able . Regex EditText _ regex Type , Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 1 Ġ-> Ġset Input Regex ( REGEX _ MOB ILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 2 Ġ-> Ġset Input Regex ( REGEX _ CH INE SE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 3 Ġ-> Ġset Input Regex ( REGEX _ EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 4 Ġ-> Ġset Input Regex ( REGEX _ NUMBER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 5 Ġ-> Ġset Input Regex ( REGEX _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 6 Ġ-> Ġset Input Regex ( REGEX _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 7 Ġ-> Ġset Input Regex ( REGEX _ NONNULL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæĺ¯åĲ¦ æľī è¿Ļä¸ª è¾ĵåħ¥ æłĩè®° Ġ*/ ĊĠĠĠ Ġfun Ġhas InputType ( type : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( input Type Ġand Ġtype ) Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæ·»åĬł ä¸Ģä¸ª è¾ĵåħ¥ æłĩè®° Ġ*/ ĊĠĠĠ Ġfun Ġadd InputType ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Type Ġ= Ġinput Type Ġor Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ ç§»éĻ¤ ä¸Ģä¸ª è¾ĵåħ¥ æłĩè®° Ġ*/ ĊĠĠĠ Ġfun Ġremove InputType ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Type Ġ= Ġinput Type Ġand Ġtype . inv () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® è¾ĵåħ¥ æŃ£ åĪĻ Ġ*/ ĊĠĠĠ Ġfun Ġset Input Regex ( regex : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( regex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpattern Ġ= ĠPattern . compile ( regex !! ) ĊĠĠĠĠĠĠĠ Ġadd Filters ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġèİ·åıĸ è¾ĵåħ¥ æŃ£ åĪĻ Ġ*/ ĊĠĠĠ Ġfun Ġget Input Regex (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpattern !!. pattern () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæ·»åĬł çŃ Ľ éĢī è§ĦåĪĻ Ġ*/ ĊĠĠĠ Ġfun Ġadd Filters ( filter : ĠInput Filter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Filters : ĠArray < Input Filter ?> ? ĊĠĠĠĠĠĠĠ Ġval Ġold Filters : ĠArray < Input Filter ?> ? Ġ= Ġfilters ĊĠĠĠĠĠĠĠ Ġif Ġ( old Filters Ġ!= Ġnull Ġ&& Ġold Filters . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Filters Ġ= ĠarrayOf Null s < Input Filter ? >( old Filters . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤įåĪ¶ æĹ§ æķ°ç»Ħ çļĦ åħĥç´ł åĪ° æĸ° æķ°ç»Ħ ä¸Ń ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( old Filters , Ġ 0 , Ġnew Filters , Ġ 0 , Ġold Filters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Filters [ old Filters . size ] Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Filters Ġ= ĠarrayOf Null s < Input Filter ? >( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Filters [ 0 ] Ġ= Ġfilter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . set Filters ( new Filters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæ¸ ħ ç©º çŃ Ľ éĢī è§ĦåĪĻ Ġ*/ ĊĠĠĠ Ġfun Ġclear Filters () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . set Filters ( array Of Null s ( 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Input Filter ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsource Ġ æĸ° è¾ĵåħ¥ çļĦ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ* Ġ@ param Ġstart Ġ æĸ° è¾ĵåħ¥ çļĦ åŃĹç¬¦ä¸² èµ· å§ĭ ä¸ĭ æłĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġend Ġ æĸ° è¾ĵåħ¥ çļĦ åŃĹç¬¦ä¸² ç»Ī çĤ¹ ä¸ĭ æłĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Ġ è¾ĵåħ¥ ä¹ĭåīį æĸĩæľ¬ æ¡Ĩ åĨħå®¹ ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Start Ġåľ¨ åİŁ åĨħå®¹ ä¸ĬçļĦ èµ· å§ĭ åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ@ param Ġdest End Ġåľ¨ åİŁ åĨħå®¹ ä¸ĬçļĦ ç»Ī çĤ¹ åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ@ return Ġè¿ĶåĽŀ åŃĹç¬¦ä¸² å°Ĩ ä¼ļ åĬłåħ¥ åĪ° åĨħå®¹ ä¸Ń ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfilter ( ĊĠĠĠĠĠĠĠ Ġsource : ĠCharSequence ?, Ġstart : ĠInt , Ġend : ĠInt , ĊĠĠĠĠĠĠĠ Ġdest : ĠSp anned ?, Ġdest Start : ĠInt , Ġdest End : ĠInt ĊĠĠĠ Ġ): ĠCharSequence ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pattern Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġæĭ ¼ æİ¥ åĩº æľĢç»Ī çļĦ åŃĹç¬¦ä¸² ĊĠĠĠĠĠĠĠ Ġval Ġbegin : ĠString Ġ= Ġdest . toString (). substring ( 0 , Ġdest Start ) ĊĠĠĠĠĠĠĠ Ġval Ġover : ĠString Ġ= Ġdest . toString (). substring ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Start Ġ+ Ġ( dest End Ġ- Ġdest Start ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Start Ġ+ Ġ( dest . toString (). length Ġ- Ġbegin . length ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠString Ġ= Ġbegin Ġ+ Ġsource Ġ+ Ġover ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æĺ¯ æıĴåħ¥ è¿ĺæĺ¯ åĪłéĻ¤ ĊĠĠĠĠĠĠĠ Ġif Ġ( dest Start Ġ> Ġdest End Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ æıĴåħ¥ åŃĹç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! pattern !!. matcher ( result ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸į åĮ¹éħį å°± ä¸į è®© è¿Ļä¸ª åŃĹç¬¦ è¾ĵåħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ åĪłéĻ¤ åŃĹç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! pattern !!. matcher ( result ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä¸į åĮ¹éħį åĪĻ ä¸į è®© åĪłéĻ¤ ï¼Ī åĪł ç©º æĵįä½ľ éĻ¤ å¤ĸ ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdest . toString (). substring ( dest Start , Ġdest End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸į åģļ ä»»ä½ķ ä¿®æĶ¹ ĊĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠ Ġ} Ċ }