Hướng dẫn regex email python - trăn email regex

Giới thiệu

Các biểu thức chính quy, hoặc viết tắt là regex, là các biểu thức của các mẫu có thể được sử dụng để tìm kiếm văn bản và thay thế các hành động, xác nhận, phân tách chuỗi và nhiều hơn nữa. Các mẫu này bao gồm các ký tự, chữ số và ký tự đặc biệt, dưới dạng mẫu mà mẫu phù hợp với các phân đoạn văn bản nhất định mà chúng ta đang tìm kiếm., or RegEx for short, are expressions of patterns that can be used for text search and replace actions, validations, string splitting, and much more. These patterns consist of characters, digits and special characters, in such a form that the pattern matches certain segments of text we're searching through.

Các biểu thức thông thường được sử dụng rộng rãi để khớp mẫu và các ngôn ngữ lập trình khác nhau có các giao diện để thể hiện chúng, cũng như tương tác với kết quả phù hợp.

Trong bài viết này, chúng tôi sẽ xem xét cách xác thực địa chỉ email trong Python, sử dụng các biểu thức thông thường.Python, using Regular Expressions.

Nếu bạn muốn tìm hiểu thêm về giao diện của Python với các biểu thức thông thường, hãy đọc hướng dẫn của chúng tôi về các biểu thức thường xuyên trong Python!

Email đa năng biểu hiện thông thường

Điều đáng chú ý là không có biểu thức chính quy nào phù hợp với mọi địa chỉ email hợp lệ có thể. Mặc dù, có những biểu thức có thể phù hợp với hầu hết các địa chỉ email hợp lệ.

Chúng ta cần xác định loại định dạng địa chỉ email mà chúng ta đang tìm kiếm. Định dạng email phổ biến nhất là:format are we looking for. The most common email format is:

(username)@(domainname).(top-leveldomain)

Do đó, chúng ta có thể đun sôi nó xuống một mẫu của biểu tượng

(string1)@(string2).(2+characters)
1 chia tiền tố từ phân đoạn miền.

Tiền tố là tên của người nhận - một chuỗi có thể chứa chữ hoa và chữ thường, số và một số ký tự đặc biệt như

(string1)@(string2).(2+characters)
2 (DOT), ________ 13 (dấu gạch nối) và
(string1)@(string2).(2+characters)
4 (nhấn mạnh).prefix is the recipient;s name - a string that may contain uppercase and lowercase letters, numbers, and some special characters like the
(string1)@(string2).(2+characters)
2 (dot),
(string1)@(string2).(2+characters)
3(hyphen), and
(string1)@(string2).(2+characters)
4 (underscore).

Tên miền bao gồm tên của nó và miền cấp cao nhất chia cho biểu tượng

(string1)@(string2).(2+characters)
2 (DOT). Tên miền có thể có các chữ cái, số, số và các ký hiệu
(string1)@(string2).(2+characters)
3 (dấu gạch nối). Ngoài ra, tên miền cấp cao nhất phải dài ít nhất 2 ký tự (tất cả các chữ cái chữ hoa hoặc chữ thường), nhưng có thể dài hơn.domain consists of its name and a top-level domain divided by a
(string1)@(string2).(2+characters)
2 (dot) symbol. The domain name can have uppercase and lowercase letters, numbers, and
(string1)@(string2).(2+characters)
3 (hyphen) symbols. Additionally, the top-level domain name must be at least 2 characters long (either all uppercase or lowercase letters), but can be longer.

Lưu ý: Có rất nhiều quy tắc chi tiết hơn về các email hợp lệ, chẳng hạn như số lượng ký tự, các ký tự cụ thể hơn có thể được sử dụng, v.v. Phương pháp tiếp cận đa năng. There are a lot more detailed rules regarding valid emails, such as character count, more specific characters that can be used, etc. We'll be taking a look at an extended, highly fail-proof Regular Expression as defined by RFC5322 after the general-purpose approach.

Nói một cách đơn giản, biểu thức thông thường email của chúng tôi có thể trông như thế này:

(string1)@(string2).(2+characters)

Điều này sẽ khớp chính xác cho các địa chỉ email như:

[email protected]
[email protected]
[email protected]

Một lần nữa, sử dụng cùng một biểu thức, các địa chỉ email này sẽ thất bại:

[email protected]
[email protected]
[email protected]

Điều đáng chú ý là các chuỗi không nên chứa một số ký tự đặc biệt nhất định, kẻo họ lại phá vỡ biểu mẫu. Ngoài ra, tên miền cấp cao nhất không thể là

(string1)@(string2).(2+characters)
7. Kế toán cho những trường hợp đó, chúng ta có thể đặt các quy tắc này xuống một biểu thức cụ thể có tính đến một vài trường hợp hơn là đại diện đầu tiên:

([A-Za-z0-9]+[.-_])*[A-Za-z0-9][email protected][A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+

Một ký tự đặc biệt trong tiền tố không thể ngay trước biểu tượng

(string1)@(string2).(2+characters)
1, tiền tố cũng không thể bắt đầu với nó, vì vậy chúng tôi đảm bảo rằng có ít nhất một ký tự chữ và số trước và sau mỗi ký tự đặc biệt.

Đối với miền, một email có thể chứa một vài tên miền cấp cao nhất được chia với một dấu chấm.

Rõ ràng, Regex này phức tạp hơn so với quy tắc đầu tiên, nhưng nó bao gồm tất cả các quy tắc chúng tôi đã xác định cho định dạng email. Tuy nhiên, một lần nữa, nó có thể không xác nhận đúng một số trường hợp cạnh mà chúng ta chưa nghĩ đến.

Xác thực địa chỉ email với Python

Mô -đun

(string1)@(string2).(2+characters)
9 chứa các lớp và phương thức để biểu diễn và làm việc với các biểu thức thường xuyên trong Python, vì vậy chúng tôi sẽ nhập nó vào tập lệnh của chúng tôi. Phương pháp mà chúng tôi sẽ sử dụng là
[email protected]
[email protected]
[email protected]
0. Phương thức này chỉ trả về một đối tượng khớp nếu toàn bộ chuỗi khớp với mẫu, trong mọi trường hợp khác, nó trả về
[email protected]
[email protected]
[email protected]
1.

Lưu ý:

[email protected]
[email protected]
[email protected]
2 đã được giới thiệu trong Python 3.4, trước đó,
[email protected]
[email protected]
[email protected]
3 đã được sử dụng thay thế. Trên các phiên bản mới hơn,
[email protected]
[email protected]
[email protected]
4 được ưa thích.
[email protected]
[email protected]
[email protected]
2 was introduced in Python 3.4, before that,
[email protected]
[email protected]
[email protected]
3 was used instead. On newer versions,
[email protected]
[email protected]
[email protected]
4 is prefered.

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Chúng ta hãy

[email protected]
[email protected]
[email protected]
5 Biểu thức thông thường từ trước và xác định một hàm đơn giản chấp nhận địa chỉ email và sử dụng biểu thức để xác thực nó:

import re

regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9][email protected][A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')

def isValid(email):
    if re.fullmatch(regex, email):
      print("Valid email")
    else:
      print("Invalid email")

Phương thức

[email protected]
[email protected]
[email protected]
6 biên dịch một mẫu regex thành một đối tượng regex. Nó chủ yếu được sử dụng vì lý do hiệu quả, khi chúng tôi có kế hoạch khớp với mẫu nhiều lần.

Bây giờ, hãy kiểm tra mã trên một số ví dụ chúng tôi đã xem trước đó:

isValid("[email protected]")
isValid("[email protected]")
isValid("[email protected]")
isValid("[email protected]")

Kết quả này trong:

Valid email
Valid email
Invalid email
Invalid email

Tuyệt vời, chúng tôi đã có một hệ thống hoạt động!

Email mạnh mẽ biểu hiện thông thường

Biểu thức chúng tôi đã sử dụng ở trên hoạt động tốt cho phần lớn các trường hợp và sẽ hoạt động tốt cho bất kỳ ứng dụng hợp lý nào. Tuy nhiên, nếu bảo mật là mối quan tâm cao hơn hoặc nếu bạn thích viết các biểu thức thông thường, bạn có thể chọn thắt chặt phạm vi khả năng trong khi vẫn cho phép các địa chỉ email hợp lệ vượt qua.

Các biểu thức dài có xu hướng có một chút phức tạp và khó đọc, và biểu thức này cũng không ngoại lệ:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=^_`{|}~-]+)*
|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
@
(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
|\[(?:(?:(2(5[0-5]|[0-4][0-9])
|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])
|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
  • Regex thích nghi của Bortzmeyer

Đây là biểu thức chính quy tuân thủ RFC5322 bao gồm 99,99% địa chỉ email đầu vào.* Giải thích nó bằng các từ thường ra khỏi bảng, nhưng trực quan hóa nó giúp ích rất nhiều:

*Hình ảnh và yêu cầu là lịch sự của emailRegex.com.

Đây thực sự không phải là biểu thức duy nhất thỏa mãn RFC5322. Nhiều người trong số họ làm, với mức độ thành công khác nhau. Một phiên bản ngắn hơn vẫn tuân thủ đặc tả có thể dễ dàng nhập vào phương thức

[email protected]
[email protected]
[email protected]
6 của Python để biểu thị một biểu thức:

import re

regex = re.compile(r"([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\"([]!#-[^-~ \t]|(\\[\t -~]))+\")@([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\[[\t -Z^-~]*])")

def isValid(email):
    if re.fullmatch(regex, email):
        print("Valid email")
    else:
        print("Invalid email")

isValid("[email protected]")
isValid("[email protected]")
isValid("[email protected]")
isValid("[email protected]")

Điều này cũng dẫn đến:

Valid email
Valid email
Invalid email
Invalid email

Sự kết luận

Để kết thúc hướng dẫn này, hãy sửa đổi những gì chúng ta đã học được. Có nhiều cách để xác nhận email bằng cách sử dụng các biểu thức thông thường, chủ yếu tùy thuộc vào định dạng nhất định mà chúng tôi đang tìm kiếm. Liên quan đến điều đó, không có một mẫu duy nhất nào hoạt động cho tất cả các định dạng email, chúng tôi chỉ cần xác định các quy tắc mà chúng tôi muốn định dạng tuân theo và xây dựng một mẫu phù hợp.

Mỗi quy tắc mới làm giảm mức độ tự do trên các địa chỉ được chấp nhận.