본인은 안드로이드에서 입력값을 필터로 걸러서 제한하는 경우가 있을때 Filter 또는 Matcher 사용한다.
이 기능을 조금 더 사용하기 쉽게 만들어놓은 코드가 있어서 적어본다.(종류별 패턴은 JAVA Study 에 몰아 넣겠다.)
- 상황 :
EditText et_input = findviewById(R.id.et_input);
et_input 에 이메일만 받고, 글자수는 최대 30자를 넘기게 하고싶지않다. 라고 가정한다면
- 방법 :
1. 먼저 필터를 쉽게 사용하기 위해 별도의 함수를 만든다.
2. 위의 함수를 입력창에 직접세팅 or 판단하는 함수를 이용해 판단후 처리한다.
- 코드 :
1. edt1 에는 Filter 를 이용해 숫자와 알파벳만 입력받게
2. edt 에는 Match 를 이용해 이메일 형식인지 체크 할 수 있게끔 만들었다.
[전체코드]
public class CustomFilterMatch extends Activity {
EditText edt1,edt;
Button btn;
TextView tv;
String mstrEmailPattern = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";//Email 패턴
String mstrNumberEnglishPattern = "^[a-zA-Z0-9 ]+$";//영문&숫자 패턴
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
tv = findViewById(R.id.tv);
edt1 = findViewById(R.id.edt1);
edt = findViewById(R.id.edt);
btn = findViewById(R.id.btn);
edt1.setFilters(customFilter(10));// 숫자와 알파벳만 입력가능하며, 최대 10글자 까지 입력가능하게 세팅
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edt.getText().toString()!=null&&edt.getText().toString().length()>0){
// 버튼을 누르며 입력된 값이 이메일 형식인지 체크한다.
if(checkValidate(edt.getText().toString())){
tv.setText("checkValidate 성공");
}else{
tv.setText("이메일형식이 아닙니다.");
}
}
}
});
}
/*
방법 1
해당 입력값이 패턴에 부합하는지에 대한 판단여부 값을 반환하는 함수 / 맞으면 true , 틀리면 false 반
*/
public boolean checkValidate(final String inputData) {
Matcher matcher;
Pattern pattern = Pattern.compile(mstrEmailPattern);
if(inputData!=null&&inputData.length()>0){
matcher = pattern.matcher(inputData);
return matcher.matches();
}
return false;
}
/*
방법 2
해당 입력값에 패턴을 직접 세팅하여 입력하는 순간 자동으로 체크해주는 함수 / 맞으면 입력, 틀리면 입력이 안됨
*/
public InputFilter[] customFilter(int limit) {
InputFilter[] filters = new InputFilter[]{
//최대길이 제한
new InputFilter.LengthFilter(limit),
new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
Pattern ps = Pattern.compile(mstrNumberEnglishPattern);
// 문자를 클릭하고 띄는 순간 이쪽으로 입력값이 들어와서 매치시킨다.
if (!ps.matcher(source).matches()) {
return "";
}
return null;
}
}
};
return filters;
}
}
코드를 그대로 사용하면 edt1 에는 입력자체가 안될것이고, edt 는 btn 을 실행하여야만 결과값을 얻을수있다.
-끝-
'Android Study' 카테고리의 다른 글
JSON 을 SharedPreference 에 저장하여 사용하기 (0) | 2019.04.02 |
---|---|
안드로이드 키보드 에 있는 다음,완료 버튼 작동 막기 (0) | 2019.03.29 |
갤럭시 S9 디바이스 PC 연결이슈 (0) | 2019.01.30 |
Error : android.view.WindowManager$BadTokenException (0) | 2019.01.25 |
안드로이드 DB를 이용한 Library > Paper (0) | 2019.01.22 |