Giới thiệu
Bài viết này hướng dẫn cách kiểm tra định dạng địa chỉ email hợp lệ trong Android sử dụng Regular Expression (Regex) và class android.util.Patterns có sẵn.
Các bước thực hiện
Bước 1: Tạo dự án mới
Tạo project Android Studio mới.
Bước 2: Layout (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:padding="8dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:hint="Nhập địa chỉ email"
android:inputType="textEmailAddress" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/etEmail"
android:layout_alignParentEnd="true"
android:layout_marginTop="5dp"
android:onClick="validateEmail"
android:text="Validate" />
</RelativeLayout>
Bước 3: Code Java (src/MainActivity.java)
package app.com.sample;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText etEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEmail = findViewById(R.id.etEmail);
}
public void validateEmail(View view) {
String email = etEmail.getText().toString().trim();
// Cách 1: Sử dụng Patterns.EMAIL_ADDRESS (API 1+) - KHUYẾN NGHỊ
boolean isValid = Patterns.EMAIL_ADDRESS.matcher(email).matches();
// Cách 2: Regex tùy chỉnh (nếu cần kiểm soát chặt chẽ hơn)
// String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
// boolean isValid = email.matches(emailRegex);
if (isValid) {
Toast.makeText(this, "✓ Email hợp lệ: " + email, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "✗ Email không hợp lệ: " + email, Toast.LENGTH_SHORT).show();
}
}
}
So sánh 2 cách:
| Tiêu chí | Patterns.EMAIL_ADDRESS | Custom Regex |
|---|---|---|
| Độ tin cậy | Cao (chuẩn RFC 5322) | Tùy vào regex viết |
| Hiệu năng | Tối ưu sẵn | Cần compile pattern |
| Tùy biến | Không thể | Linh hoạt hoàn toàn |
| Khuyến nghị | Nên dùng | Chỉ khi có yêu cầu đặc biệt |
Bước 4: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<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>
Chạy ứng dụng
Nhập email vào EditText, nhấn Validate. Kết quả hiển thị qua Toast.

Mở rộng: Validate real-time khi gõ (TextWatcher)
etEmail.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
boolean valid = Patterns.EMAIL_ADDRESS.matcher(s).matches();
etEmail.setError(valid ? null : "Email không hợp lệ");
// Hoặc đổi màu background, icon...
}
@Override
public void afterTextChanged(Editable s) {}
});
Kotlin Extension
fun String.isValidEmail(): Boolean {
return Patterns.EMAIL_ADDRESS.matcher(this).matches()
}
// Sử dụng:
if (emailInput.isValidEmail()) { ... }
Lưu ý
- Regex chỉ kiểm tra cú pháp, không kiểm tra email có thực sự tồn tại
- Để verify email thật, cần gửi OTP/link xác thực
inputType="textEmailAddress"chỉ hiển thị keyboard phù hợp, không validate