Files
OpenFrame/lib/email-validation.ts
T

29 lines
921 B
TypeScript

const MAX_EMAIL_LENGTH = 254;
const MAX_EMAIL_LOCAL_LENGTH = 64;
const MAX_EMAIL_DOMAIN_LABEL_LENGTH = 63;
export function normalizeEmail(email: string): string {
return email.trim().toLowerCase();
}
export function isValidEmailAddress(email: string): boolean {
if (email.length < 3 || email.length > MAX_EMAIL_LENGTH) return false;
const atIndex = email.indexOf('@');
if (atIndex <= 0 || atIndex !== email.lastIndexOf('@')) return false;
const local = email.slice(0, atIndex);
const domain = email.slice(atIndex + 1);
if (local.length > MAX_EMAIL_LOCAL_LENGTH || !domain.includes('.')) return false;
for (const char of email) {
const code = char.charCodeAt(0);
if (code <= 32 || code === 127) return false;
}
const labels = domain.split('.');
if (labels.length < 2) return false;
return labels.every((label) => label.length > 0 && label.length <= MAX_EMAIL_DOMAIN_LABEL_LENGTH);
}