Xác thực địa chỉ Email với biểu thức chính quy (Regular Expression) trong Python


Biểu thức chính quy là gì?

Biểu thức chính quy hay còn gọi là Regular Expression hay viết tắt là RegEx. Biểu thức chính quy là một chuỗi ký tự đặc biệt dùng mẫu để tìm kiếm một chuỗi hoặc một nhóm chuỗi. Nó phát hiện sự xuất hiện hoặc không xuất hiện của một văn bản bằng cách kết hợp nó với một khuôn mẫu xác định.

Kiểm tra địa chỉ Email có hợp lệ hay không trong Python

Vấn đề cần giải quyết: Cho một chuỗi ký tự, sử dụng ngôn ngữ lập trình Python để thực hiện kiểm tra xem chuỗi đó có phải là địa chỉ Email hợp lệ hay không. Chuỗi Email là một chuỗi (xâu) ký tự (một tập hợp các ký tự trong bảng ASCII) được phân chia thành hai bằng ký hiệu @, phần trước là tên email do người dùng đặt và phần sau là một tên miền.
Ví dụ:
Đầu vào: hvtuan.timoday@gmail.com
Đầu ra: Email hợp lệ.
Đầu vào: timoday.edu.vn
Đầu ra: Email không hợp lệ.

Cách 1: Kiểm tra địa chỉ Email hợp lệ bằng biểu thức chính quy

Hàm sau thực hiện kiểm tra địa chỉ Email (được truyền vào thông qua đối số) xem có hợp lệ hay không. Nếu không thì hàm trả về False. Cách này dừng sau lần so khớp đầu tiên, vì vậy cách này phù hợp nhất để kiểm tra biểu thức chính quy hơn là trích xuất dữ liệu.

import re

# định nghĩa hàm kiểm tra tính hợp lệ của địa chỉ Email
def kiem_tra_email(email):
    regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
    
    if re.fullmatch(regex, email):
        return True
    return False

# chương trình chính
if __name__ == "__main__":
    email_1 = "hvtuan.timoday@gmail.com"
    if kiem_tra_email(email_1):
        print("Email hợp lệ")
    else:
        print("Email không hợp lệ")
    
    email_2 = "timoday.edu.vn"
    if kiem_tra_email(email_2):
        print("Email hợp lệ")
    else:
        print("Email không hợp lệ")

Cách 2: Xác thực Email trong Python bằng re.match

Phương thức re.match() chỉ tìm kiếm từ đàu chuỗi và trả về đối tượng khớp nếu tìm thấy. Nhưng nếu tìm thấy một chuỗi con trùng khớp ở đâu đó ở giữa chuỗi thì nó sẽ không trả về kết quả nào.

import re

# định nghĩa hàm kiểm tra tính hợp lệ của địa chỉ Email
def kiem_tra_email(email):
    pat = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
    
    if re.match(pat, email):
        return True
    return False

# chương trình chính
if __name__ == "__main__":
    email_1 = "hvtuan.timoday@gmail.com"
    if kiem_tra_email(email_1):
        print("Email hợp lệ")
    else:
        print("Email không hợp lệ")
    
    email_2 = "timoday.edu.vn"
    if kiem_tra_email(email_2):
        print("Email hợp lệ")
    else:
        print("Email không hợp lệ")

Cách 3: Kiểm tra xem địa chỉ Email có hợp lệ hay không trong Python bằng email_validator

Thư viện này xác nhận rằng một chuỗi có dạng name@example.com hay không. Đây là loại xác thực mà bạn muốn dùng cho Form đăng nhập chứa email trên web. Cung cấp thông báo lỗi thân thiện khi xác thực không thành công.
Trước hết ta cần cài đặt thư viện email – validator vào máy tính.

from email_validator import validate_email, EmailNotValidError

# định nghĩa hàm kiểm tra tính hợp lệ của địa chỉ Email
def kiem_tra_email(testEmail):
    try:
        # Validating the 'testEmail'
        v = validate_email(testEmail)
        # If the testEmail' is valid
        # it is updated with its normalized form
        testEmail = v.email
        return True, testEmail
    except EmailNotValidError as e:
        # If 'testEmail' is not valid
        # print a human readable error message
        return False, str(e)

# chương trình chính
if __name__ == "__main__":
    email_1 = "hvtuan.timoday@gmail.com"
    kq = kiem_tra_email(email_1)
    if kq[0]:
        print("Email hợp lệ")
    else:
        print(kq[1])
    
    email_2 = "timoday.edu.vn"
    kq = kiem_tra_email(email_2)
    if kq[0]:
        print("Email hợp lệ")
    else:
        print(kq[1])

Cách 4: Xác thực Email từ tệp văn bản bằng Python

Ta sử dụng re.search() từ biểu thức chính quy để xác thực. Ta có thể lọc ra nhiều email từ một tệp văn bản.

import re

with open("data.txt", "r") as file:
    data = file.readlines()
list_email = []
for email in data:
    test_email = email.split("\n")
    for i in test_email:
        obj = re.search(r'[\w.]+\@[\w.]+', i)
        if obj:
            list_email.append(test_email[0])

print(list_email)

Đầu vào:

Tệp đầu vào "data.txt"

Tệp đầu vào “data.txt”


Đầu ra:
Kết quả thu thập email từ tệp

Kết quả thu thập email từ tệp


Tài liệu tham khảo:

  1. www.geeksforgeeks.org
  2. www.programiz.com
  3. www.w3schools.com

You may also like...

1 Response

  1. 25/06/2024

    […] bài viết trước, ta được tìm hiểu về cách Xác thực địa chỉ Email với biểu thức chính quy (Regular Expression) trong Python, nếu các bạn chưa đọc, bạn có thể đọc lại bài viết này để nắm bắt cơ […]

Trả lời