IsValidEmail Function
Validation5 functions
Utility Overview
Details
Comprehensive email validation with multiple validation strategies from basic to RFC-compliant patterns
Category:Validation
Functions:isValidEmail, isValidEmailComprehensive, isValidEmailRFC, isValidEmailSimple, validateEmailDetailed
Performance:
- Time: O(n) where n is email string length - Space: O(1) constant space
Concepts:
regular expressionsstring validationRFC standardsinput validation
Implementation
isValidEmail
Time: O(n) | Space: O(1)
export function isValidEmail(email: string): boolean {
if (typeof email !== 'string') return false;
if (email.length === 0 || email.length > 320) return false; // RFC limit
// Basic regex pattern that covers most real-world cases
const basicPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return basicPattern.test(email.trim());
}
// Comprehensive email validationUsage Examples
Basic email validation
// Valid emails
isValidEmail('user@example.com'); // true
isValidEmail('test.email@domain.org'); // true
isValidEmail('user+tag@example.co.uk'); // true
// Invalid emails
isValidEmail(''); // false
isValidEmail('user@'); // false
isValidEmail('@domain.com'); // false
isValidEmail('user.domain.com'); // false
isValidEmail('user@domain'); // falseForm validation with email checking
interface LoginForm {
email: string;
password: string;
}
function validateLoginForm(form: LoginForm): string[] {
const errors: string[] = [];
if (!isValidEmail(form.email)) {
errors.push('Please enter a valid email address');
}
if (form.password.length < 8) {
errors.push('Password must be at least 8 characters');
}
return errors;
}
const form = { email: 'invalid-email', password: '123' };
const errors = validateLoginForm(form);
// ['Please enter a valid email address', 'Password must be at least 8 characters']Detailed email validation with error reporting
const result = validateEmailDetailed('user@invalid');
console.log(result);
// {
// isValid: false,
// errors: ['Domain must contain at least one dot']
// }
const result2 = validateEmailDetailed(' user@example.com ');
console.log(result2);
// {
// isValid: false,
// errors: ['Email contains leading or trailing whitespace']
// }
// Use in user interfaces
function displayEmailErrors(email: string) {
const validation = validateEmailDetailed(email);
if (!validation.isValid) {
return validation.errors.join(', ');
}
return 'Email is valid';
}Filter valid emails from a list
const emailList = [
'user@example.com',
'invalid-email',
'test@domain.org',
'another@invalid',
'valid@company.co.uk'
];
// Filter valid emails
const validEmails = emailList.filter(isValidEmail);
console.log(validEmails);
// ['user@example.com', 'test@domain.org', 'valid@company.co.uk']
// Count valid vs invalid
const validCount = emailList.filter(isValidEmail).length;
const invalidCount = emailList.length - validCount;
console.log(`Valid: ${validCount}, Invalid: ${invalidCount}`);
// 'Valid: 3, Invalid: 2'
// Group by validity
const grouped = emailList.reduce((acc, email) => {
const key = isValidEmail(email) ? 'valid' : 'invalid';
acc[key] = acc[key] || [];
acc[key].push(email);
return acc;
}, {} as Record<string, string[]>);