ajt-validator
Version:
Validation library for JavaScript and TypeScript
46 lines (45 loc) • 2.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EmailValidator = void 0;
const base_1 = require("../base");
class EmailValidator extends base_1.BaseValidator {
constructor(options = {}) {
super();
// RFC 5322 compliant email regex pattern in simple mode
this.simpleEmailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
// Stricter RFC 5322 compliant email regex pattern
this.strictEmailPattern = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
this.options = Object.assign({ allowedDomains: [], blockedDomains: [], maxLength: 254, strictMode: false }, options);
}
validate(email) {
if (!email) {
return this.createError('EMAIL_REQUIRED', 'Email address is required');
}
if (email.length > this.options.maxLength) {
return this.createError('EMAIL_TOO_LONG', `Email must not exceed ${this.options.maxLength} characters`);
}
// Basic format validation
const emailPattern = this.options.strictMode
? this.strictEmailPattern
: this.simpleEmailPattern;
if (!emailPattern.test(email)) {
return this.createError('INVALID_EMAIL_FORMAT', 'Email format is invalid');
}
// Domain validation
const domain = email.split('@')[1].toLowerCase();
// Check allowed domains if specified
if (this.options.allowedDomains &&
this.options.allowedDomains.length > 0 &&
!this.options.allowedDomains.some(allowedDomain => domain === allowedDomain.toLowerCase() || domain.endsWith(`.${allowedDomain.toLowerCase()}`))) {
return this.createError('DOMAIN_NOT_ALLOWED', 'Email domain is not in the list of allowed domains');
}
// Check blocked domains
if (this.options.blockedDomains &&
this.options.blockedDomains.length > 0 &&
this.options.blockedDomains.some(blockedDomain => domain === blockedDomain.toLowerCase() || domain.endsWith(`.${blockedDomain.toLowerCase()}`))) {
return this.createError('DOMAIN_BLOCKED', 'Email domain is blocked');
}
return this.createSuccess(email.trim().toLowerCase());
}
}
exports.EmailValidator = EmailValidator;