안녕하세요.
머리싸매고 고민하다가 도저히 안되겠어서 여러분의 도움을 기다립니다 ㅜ.ㅜ
다른게 아니라 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) {
}
});
소스가 이쁘게 안올라가네요 ㅜ.ㅜ
여러분들의 도움이 절실합니다. 도와주세요 ㅜ.ㅜ
끝까지 읽어주셔서 감사합니다. 행복한 하루, 즐거운 주말 되세요~
천지인을 허용하지 않아 생기는 문제인데요. 아래와 같은 유니코드를 모두 추가해주시면 됩니다.
좀 더 자세한 설명은 여기에 작성해두었습니다.
http://hyogij.wordpress.com/2014/05/13/%ED%95%9C%EA%B8%80-%ED%95%84%ED%84%B0%EB%A7%81/
<string name="pattern_alphanumeric_hangul">^[a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]+$</string>