ภาพรวม
การตรวจสอบความถูกต้องของอีเมล (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→ "อีเมลถูกต้อง"