안녕하세요.

머리싸매고 고민하다가 도저히 안되겠어서 여러분의 도움을 기다립니다 ㅜ.ㅜ

다른게 아니라 EditText 입력 제한을 거는 것 때문에 그렇습니다.

영어/한글/숫자 만 입력 가능하고 이외의 특수문자를 모두 차단해야하는데요.

이게 구성이 너무 어렵네요.

EditText의 속성 제한은 특수문자만 차단하거나 한,영,수 만입력하게 하는 디테일한 부분은 안되는것 같더라구요.

찾아보니 addTextChangedListener 와 TextWatcher를 이용해서 EditText 내용이 변하면 변한 문자를 가져다 조작이 가능하더라구요. 그래서 이 부분에서 어떻게 차단을 해보려는데요.

어떻게 한글, 영어, 숫자만 입력을 받게 할 수 있을 지 모르겠어요.

혹시 방법을 아시는 분은 꼭 좀 알려주세요 ㅜ.ㅜ

일단 전 아스키 코드 값을 이용해서 ( charAt() ) 해볼 수 있을까 했는데 제가 구성한 걸로는 특수문자 차단도 안되고 한글을 일정이상 입력하면 액티비티가 죽어버리네요 ㅜ.ㅜ


EditText et_userName = (EditText) findViewById(R.id.et_push_name_user);

et_userName.addTextChangedListener(new TextWatcher(){
  
    public void afterTextChanged(Editable s) {
      //이 부분이 없으면 문자를 썼다 지웠을때 죽는 것 같더라구요.
      if(s.toString().getBytes().length >0){
       
       int c = s.charAt(0);
       
       int len = s.toString().getBytes().length;
       //일단 12byte 이상 입력 못받게 하는 부분입니다.
       if(s.toString().getBytes().length > 12){
        s.delete(12, 13);
        Toast.makeText(getBaseContext(), "이름은 한글/영문/숫자를 12byte까지 입력할 수 있습니다",Toast.LENGTH_SHORT).show();
       }
       //이 부분이 문제인 차단부 입니다. 넷에서 아스키 코드 값 범위 쳐서 찾은 건데 특수문자가 안걸러지네요. 한글을 일정 수 이상 쓰면 액티비티가 죽고요.
       if( (c>= 48 && c <= 57) || (c>=65 && c<=90) || (c>=97 && c<=122) || (c >= 12592 || c <= 12687) ){
        
       }else{
        //s.delete(len, len+1 );
        Toast.makeText(getBaseContext(), "nonono",Toast.LENGTH_SHORT).show();
       }
       
      }


    }

    public void beforeTextChanged(CharSequence s, int start, int count,
      int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
      int count) {
    }
    
   });

소스가 이쁘게 안올라가네요 ㅜ.ㅜ

여러분들의 도움이 절실합니다. 도와주세요 ㅜ.ㅜ

끝까지 읽어주셔서 감사합니다. 행복한 하루, 즐거운 주말 되세요~