0
0
PythonHow-ToBeginner · 3 min read

How to Check if String is a Valid Email in Python

To check if a string is a valid email in Python, you can use the re module with a regular expression pattern that matches email formats. Alternatively, the email.utils.parseaddr() function can help parse and validate email addresses simply.
📐

Syntax

Use the re module to match a string against an email pattern. The pattern checks for characters before and after an '@' symbol and a domain.

Example syntax:

  • import re: imports the regular expression module.
  • pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$': defines the email pattern.
  • re.match(pattern, email_string): checks if the string matches the pattern.
python
import re

pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'

email = 'example@domain.com'

if re.match(pattern, email):
    print('Valid email')
else:
    print('Invalid email')
Output
Valid email
💻

Example

This example shows how to use the re module to check if a string is a valid email address. It prints whether the email is valid or not.

python
import re

def is_valid_email(email):
    pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
    return re.match(pattern, email) is not None

emails = ['user@example.com', 'bad-email@', 'hello.world@site.org']

for e in emails:
    if is_valid_email(e):
        print(f"{e} is valid")
    else:
        print(f"{e} is invalid")
Output
user@example.com is valid bad-email@ is invalid hello.world@site.org is valid
⚠️

Common Pitfalls

Common mistakes include using too simple or too strict regex patterns that either accept invalid emails or reject valid ones. Also, regex cannot catch all email rules like domain validity.

Using email.utils.parseaddr() can help parse emails but does not fully validate format.

python
import re
from email.utils import parseaddr

# Wrong: too simple regex
pattern_wrong = r'.+@.+'

# Right: better regex
pattern_right = r'^[\w\.-]+@[\w\.-]+\.\w+$'

email = 'user@domain'

# Wrong way
print('Wrong regex:', re.match(pattern_wrong, email) is not None)  # True, but invalid

# Right way
print('Right regex:', re.match(pattern_right, email) is not None)  # False

# Using parseaddr
print('Parseaddr:', parseaddr(email)[1] == email)  # True
Output
Wrong regex: True Right regex: False Parseaddr: True
📊

Quick Reference

Tips for checking valid emails in Python:

  • Use re with a good regex pattern for basic format checks.
  • Remember regex can't verify if the domain actually exists.
  • Use email.utils.parseaddr() to parse emails but not for full validation.
  • For complex validation, consider external libraries like validate_email.

Key Takeaways

Use Python's re module with a regex pattern to check basic email format validity.
Avoid overly simple regex patterns that accept invalid emails.
email.utils.parseaddr() helps parse but does not fully validate emails.
Regex cannot confirm if the email domain actually exists or is reachable.
For full validation, consider specialized libraries beyond regex.