Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีจำกัด EditText ให้รับเฉพาะตัวอักษรภาษาอังกฤษใน Android

ภาพรวม

ตัวอย่างนี้แสดงวิธีการกำหนดให้ EditText รับเฉพาะตัวอักษร A-Z, a-z และช่องว่างเท่านั้น โดยใช้ InputFilter

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: จัดทำ 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"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:hint="ป้อนข้อความที่นี่" />
</RelativeLayout>

ขั้นตอนที่ 3: เขียนโค้ด MainActivity.java

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

public class MainActivity extends AppCompatActivity {
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        
        editText.setFilters(new InputFilter[] { new InputFilter() {
            @Override
            public CharSequence filter(CharSequence charSequence, int start, int end,
                    Spanned dest, int etStart, int etEnd) {
                if (charSequence.equals("")) {
                    return charSequence;
                }
                if (charSequence.toString().matches("[a-zA-Z ]+")) {
                    return charSequence;
                }
                return "";
            }
        }});
    }
}

การทำงานของ InputFilter

  • regex [a-zA-Z ]+ รับเฉพาะตัวอักษรอังกฤษและช่องว่าง
  • คืนค่า empty string ("") เพื่อบล็อกอักขระที่ไม่ต้องการ
  • อนุญาตให้ลบข้อความได้ (charSequence.equals(""))

ขยายความสามารถ

สามารถปรับ regex ได้ตามต้องการ เช่น:

  • [a-zA-Z0-9 ]+ - อนุญาตตัวเลขด้วย
  • [\\p{L} ]+ - อนุญาตตัวอักษรทุกภาษา (Unicode)
  • [a-zA-Z0-9@.]+ - สำหรับอีเมล

การทดสอบ

พิมพ์ตัวเลข สัญลักษณ์ หรือภาษาไทย จะไม่สามารถป้อนได้ พิมพ์ภาษาอังกฤษได้ปกติ