'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isEmail; var _assertString = require('./util/assertString'); var _assertString2 = _interopRequireDefault(_assertString); var _merge = require('./util/merge'); var _merge2 = _interopRequireDefault(_merge); var _isByteLength = require('./isByteLength'); var _isByteLength2 = _interopRequireDefault(_isByteLength); var _isFQDN = require('./isFQDN'); var _isFQDN2 = _interopRequireDefault(_isFQDN); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var default_email_options = { allow_display_name: false, allow_utf8_local_part: true, require_tld: true }; /* eslint-disable max-len */ /* eslint-disable no-control-regex */ var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i; var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i; var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i; var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i; var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i; /* eslint-enable max-len */ /* eslint-enable no-control-regex */ function isEmail(str, options) { (0, _assertString2.default)(str); options = (0, _merge2.default)(options, default_email_options); if (options.allow_display_name) { var display_email = str.match(displayName); if (display_email) { str = display_email[1]; } } var parts = str.split('@'); var domain = parts.pop(); var user = parts.join('@'); var lower_domain = domain.toLowerCase(); if (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com') { user = user.replace(/\./g, '').toLowerCase(); } if (!(0, _isByteLength2.default)(user, { max: 64 }) || !(0, _isByteLength2.default)(domain, { max: 256 })) { return false; } if (!(0, _isFQDN2.default)(domain, { require_tld: options.require_tld })) { return false; } if (user[0] === '"') { user = user.slice(1, user.length - 1); return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user); } var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart; var user_parts = user.split('.'); for (var i = 0; i < user_parts.length; i++) { if (!pattern.test(user_parts[i])) { return false; } } return true; } module.exports = exports['default'];