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

วิธีตรวจสอบรูปแบบอีเมลใน EditText บน Android

ภาพรวม

การตรวจสอบความถูกต้องของอีเมล (Email Validation) เป็นสิ่งจำเป็นในหน้าล็อกอินหรือสมัครสมาชิก เพื่อป้องกันข้อมูลผิดพลาดก่อนส่งไปยังเซิร์ฟเวอร์ บทความนี้สาธิตวิธีตรวจสอบรูปแบบอีเมลด้วย Regular Expression (Regex) ใน Android

ขั้นตอนการสร้าง

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

Android Studio → File → New Project → Empty Activity

ขั้นตอนที่ 2: Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:gravity="center_horizontal"
    android:padding="24dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="อีเมล"
        android:inputType="textEmailAddress"
        android:autofillHints="emailAddress" />

    <Button
        android:id="@+id/btnCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="ตรวจสอบ" />

</LinearLayout>

จุดสังเกต: ใช้ android:inputType="textEmailAddress" เพื่อแสดงคีย์บอร์ดสำหรับอีเมลโดยอัตโนมัติ

ขั้นตอนที่ 3: MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {

    // Regex รูปแบบอีเมลมาตรฐาน RFC 5322 (เวอร์ชันง่ายๆ)
    private static final String EMAIL_REGEX = 
        "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
    private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);

    private EditText etEmail;
    private Button btnCheck;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etEmail = findViewById(R.id.email);
        btnCheck = findViewById(R.id.btnCheck);

        btnCheck.setOnClickListener(v -> validateEmail());
    }

    private void validateEmail() {
        String email = etEmail.getText().toString().trim();

        if (email.isEmpty()) {
            showToast("กรุณากรอกอีเมล");
            return;
        }

        if (EMAIL_PATTERN.matcher(email).matches()) {
            showToast("อีเมลถูกต้อง ✓");
        } else {
            showToast("รูปแบบอีเมลไม่ถูกต้อง ✗");
        }
    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
}

คำอธิบาย Regex

ส่วนความหมาย
^เริ่มต้นของสตริง
[A-Za-z0-9._%+-]+ตัวอักษร ตัวเลข และสัญลักษณ์ที่อนุญาตในส่วน local-part (ก่อน @)
@ตัวแทน @ ตรงๆ
[A-Za-z0-9.-]+โดเมนเนม (อาจมีจุดและขีดลบ)
\.จุดก่อน TLD (Top Level Domain)
[A-Za-z]{2,}TLD อย่างน้อย 2 ตัวอักษร (เช่น com, th, co.th)
$สิ้นสุดของสตริง

วิธีทางเลือก: ใช้ Patterns.EMAIL_ADDRESS (API 1+)

Android มี Pattern สำหรับอีเมลในตัวแล้ว (แต่อาจไม่เข้มงวดเท่า Regex ข้างต้น):

import android.util.Patterns;

// ...
if (Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
    // valid
}

แนวทางปฏิบัติที่ดี (Best Practices)

  • ตรวจสอบฝั่ง Client + Server: Regex ฝั่งแอปช่วย UX แต่ต้อง Validate อีกครั้งฝั่งเซิร์ฟเวอร์
  • inputType="textEmailAddress" ช่วย UX แต่ไม่รับประกันความถูกต้อง
  • พิจารณาใช้ไลบรารีเช่น com.google.android.gms:play-services-auth สำหรับ Google Sign-In ลดภาระการกรอกอีเมล
  • สำหรับ Production ควรใช้ Regex ที่ครอบคลุม RFC 5322 อย่างเต็มที่

การทดสอบ

รันแอป → ทดสอบกรอกค่าต่างๆ:

  • เว้นว่าง → "กรุณากรอกอีเมล"
  • invalid-email → "รูปแบบอีเมลไม่ถูกต้อง"
  • user@example.com → "อีเมลถูกต้อง"