투케이2K

134. (TWOK/WORK) [업무 이슈] 안드로이드 EditText 키보드 inputType phone 폰번호 입력 상태에서 클립보드 붙여 넣기 시 숫자 이외 문자열 추가 이슈 본문

투케이2K 업무정리

134. (TWOK/WORK) [업무 이슈] 안드로이드 EditText 키보드 inputType phone 폰번호 입력 상태에서 클립보드 붙여 넣기 시 숫자 이외 문자열 추가 이슈

투케이2K 2025. 2. 3. 19:06

[제 목]

[업무 이슈] 안드로이드 EditText 키보드 inputType phone 폰번호 입력 상태에서 클립보드 붙여 넣기 시 숫자 이외 문자열 추가 이슈

 

[내 용]

 

------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 안드로이드 EditText 키보드 inputType phone 폰번호 입력 상태에서 클립보드 붙여 넣기 시 숫자 이외 문자열 추가 이슈

2. 데이터 통신에서 파라미터 전송 시 휴대폰 번호는 하이픈 문자도 포함되면 안되며, Only Number 숫자 형태로 전송 필요

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. 안드로이드 EditText 입력창 화면 진입 수행

2. 기존 동작 테스트) EditText 클릭으로 포커스 요청 후 올라온 가상 키패드 타입 Number 형태 확인 및 입력 데이터 Only 숫자 확인

3. 변경 동작 테스트) 다른 화면 및 앱에 작성 된 하이픈 특수 문자 포함 휴대폰 번호 (ex : 010-1234-5678) 클립 보드 복사 후 EditText 에 붙여넣기 수행 시 특수문자 그대로 추가 되는 것 확인

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. EditText 실시간 텍스트 변경 감지 이벤트 등록 해 변경된 EditText 에 숫자 이외의 문자가 포함 된 경우 정규 식 사용해 제거 및 다시 EditText 에 setText 텍스트 지정 수행

2. 샘플 소스 코드 : 

  inputPhoneEditText!!.addTextChangedListener(object : TextWatcher {
      override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
          S_Log.d("PHONE_BEAFORE", inputPhoneEditText!!.text.toString())
      }
      override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
          S_Log.w("PHONE_CHANGE", inputPhoneEditText!!.text.toString())

          // [정규식 수행 숫자만 허용 : 한글, 영문, 특수 문자 등 모두 제거]
          var phoneText = inputPhoneEditText!!.text.toString()

          var regPhoneText = C_Util.getRexpNumberString(phoneText)
          regPhoneText = regPhoneText.trim().replace(" ", "")

          if (phoneText.length != regPhoneText.length){ // [제거 된 문자가 있는 경우]

              Handler(Looper.getMainLooper()).postDelayed({

                  inputPhoneEditText!!.setText(regPhoneText.trim()) // [뷰 갱신 수행]

              },1000)

          }
      }
      override fun afterTextChanged(p0: Editable?) {
          S_Log.e("PHONE_AFTER", inputPhoneEditText!!.text.toString())
      }
  })

------------------------------------------------------------------------------

 

반응형
Comments