프로그래밍/Android

[Android] EditView에서 IP Address 입력 정규화 처리

흔한티벳여우 2020. 9. 17. 18:35
반응형

자주 사용하는 EditView에서 정규화와 filter를 이용한 입력처리를 보여주고자 한다.

먼저 EditView에서 우리는 숫자와 점 밖에 안쓰기 때문에 숫자 키보드를 나오게 하고 다른 키 입력을 못하게 막도록 다음과 같이 선언한다.

android:inputType="phone"
android:digits="1234567890."

 

이제 MainActivity단에서 onCreate단에 아래와 같이 선언해준다.

val filters = arrayOfNulls<InputFilter>(1)
filters[0] = InputFilter { source, start, end, dest, dstart, dend ->
    if (end > start) {
        val destTxt = dest.toString()
        val resultingTxt = destTxt.substring(0, dstart) + source.subSequence(
            start,
            end
        ) + destTxt.substring(dend)
        if (!resultingTxt.matches(Regex("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?"))) {
            return@InputFilter ""
        } else {
            val splits = resultingTxt.split(".")
            for (i in splits) {
                if (i != ""){
                    if (i.toInt() > 255 || i.toInt() == 0) {
                        return@InputFilter ""
                    }
                }
            }
        }
    }
    null
}


editView.filters = filters

 

반응형