Skip to main content

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 validation

Usage 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');                // false

Form 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[]>);