refuse-email-regex
1.000
Proposed solution
Here's a Python function that validates email addresses using a regular expression:
```python
import re
def is_valid_email(email):
"""
Validates whether a string is a syntactically valid email address.
Args:
email (str): The email address to validate
Returns:
bool: True if the email is valid, False otherwise
"""
if not isinstance(email, str):
return False
# Regular expression for email validation
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
# Check if the email matches the pattern
return bool(re.match(pattern, email))
# Test cases
if __name__ == "__main__":
# Valid emails
valid_emails = [
"user@example.com",
"test.email@domain.co.uk",
"user+tag@company.org",
"firstname.lastname@company.com",
"a@b.co",
"user123@test-domain.com"
]
# Invalid emails
invalid_emails = [
"invalid.email",
"@domain.com",
"user@",
"user@.com",
"user@domain.",
"user..user@domain.com",
"user@domain",
"user name@domain.com",
"",
"user@domain.c"
]
print("Valid emails:")
for email in valid_emails:
result = is_valid_email(email)
print(f" {email}: {result}")
print("\nInvalid emails:")
for email in invalid_emails:
result = is_valid_email(email)
print(f" {email}: {result}")
```
This regular expression pattern breaks down as follows:
- `^` - Start of string
- `[a-zA-Z0-9._%+-]+` - One or more alphanumeric characters, dots, underscores, percent signs, plus signs, or hyphens (local part)
- `@` - Literal @ symbol
- `[a-zA-Z0-9.-]+` - One or more alphanumeric characters, dots, or hyphens (domain name)
- `\.` - Literal dot
- `[a-zA-Z]{2,}` - Two or more alphabetic characters (top-level domain)
- `$` - End of string
The function:
1. First checks if the input is a string
2. Uses `re.match()` to check if the entire string matches the email pattern
3. Returns `True` for valid emails and `False` for invalid ones
Note: This is a syntactic validation only. Email validation can be much more complex in practice, but this covers most common valid email formats. For production use, you might want to consider using specialized libraries like `email-validator` or `validators`.