Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 EditText 입력값 검증 방법: InputFilter로 영문자·숫자만 입력받기

안드로이드 앱을 개발하다 보면 사용자가 EditText에 원하는 형식의 값만 입력하도록 제한해야 하는 경우가 자주 있습니다. 이 튜토리얼에서는 InputFilter를 활용해 영문 대소문자, 숫자, 언더스코어(_)만 입력할 수 있도록 EditText 입력값을 검증하는 방법을 단계별로 살펴봅니다.

1단계: 새 프로젝트 생성

안드로이드 스튜디오에서 File ⇒ New Project로 이동한 뒤, 새 프로젝트 생성에 필요한 정보를 모두 입력하고 프로젝트를 생성합니다.

2단계: 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="영문자와 숫자를 입력하세요"
        android:inputType="text"
        tools:ignore="Autofill" />

</RelativeLayout>

3단계: ValidateFilter 클래스 작성

입력값을 검증할 커스텀 필터 클래스를 만듭니다. src/ValidateFilter.java 파일에 아래 코드를 추가하세요. 이 클래스는 InputFilter 인터페이스를 구현하며, filter() 메서드에서 입력되는 문자 하나하나를 정규식 패턴과 비교합니다. 패턴에 맞지 않는 문자가 감지되면 빈 문자열("")을 반환해 해당 입력을 차단합니다.

package app.tutorialspoint.com.sample;

import android.text.InputFilter;
import android.text.Spanned;
import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidateFilter implements InputFilter {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
                               int dstart, int dend) {
        for (int i = start; i < end; i++) {
            String checkMe = String.valueOf(source.charAt(i));
            Pattern pattern =
                Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789_]*");
            Matcher matcher = pattern.matcher(checkMe);
            boolean valid = matcher.matches();
            if (!valid) {
                Log.d("", "invalid");
                return "";
            }
        }
        return null;
    }
}

4단계: MainActivity에서 필터 적용

src/MainActivity.java 파일에 아래 코드를 추가합니다. setFilters() 메서드를 호출해 EditText에 ValidateFilter를 적용하는 것이 핵심입니다.

package app.tutorialspoint.com.sample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.InputFilter;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText editText = findViewById(R.id.editText);
        editText.setFilters(new InputFilter[]{ new ValidateFilter() });
    }
}

5단계: AndroidManifest.xml 작성

androidManifest.xml 파일에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.tutorialspoint.com.sample">

    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. 안드로이드 스튜디오에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 목록에서 실행할 모바일 기기를 선택하세요. 그러면 기기에 앱의 기본 화면이 표시됩니다.

EditText에 영문자, 숫자, 언더스코어 외의 문자(한글, 특수문자, 공백 등)를 입력하면 해당 문자가 자동으로 걸러지는 것을 확인할 수 있습니다.

안드로이드 EditText 입력값 검증 방법: InputFilter로 영문자·숫자만 입력받기