(function($) { $.fn.bootstrapValidator.i18n.emailAddress = $.extend($.fn.bootstrapValidator.i18n.emailAddress || {}, { 'default': 'Please enter a valid email address' }); $.fn.bootstrapValidator.validators.emailAddress = { html5Attributes: { message: 'message', multiple: 'multiple', separator: 'separator' }, enableByHtml5: function($field) { return ('email' === $field.attr('type')); }, /** * Return true if and only if the input value is a valid email address * * @param {BootstrapValidator} validator Validate plugin instance * @param {jQuery} $field Field element * @param {Object} [options] * - multiple: Allow multiple email addresses, separated by a comma or semicolon; default is false. * - separator: Regex for character or characters expected as separator between addresses; default is comma /[,;]/, i.e. comma or semicolon. * @returns {Boolean} */ validate: function(validator, $field, options) { var value = $field.val(); if (value === '') { return true; } // Email address regular expression // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript var emailRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, allowMultiple = options.multiple === true || options.multiple === 'true'; if (allowMultiple) { var separator = options.separator || /[,;]/, addresses = this._splitEmailAddresses(value, separator); for (var i = 0; i < addresses.length; i++) { if (!emailRegExp.test(addresses[i])) { return false; } } return true; } else { return emailRegExp.test(value); } }, _splitEmailAddresses: function(emailAddresses, separator) { var quotedFragments = emailAddresses.split(/"/), quotedFragmentCount = quotedFragments.length, emailAddressArray = [], nextEmailAddress = ''; for (var i = 0; i < quotedFragmentCount; i++) { if (i % 2 === 0) { var splitEmailAddressFragments = quotedFragments[i].split(separator), splitEmailAddressFragmentCount = splitEmailAddressFragments.length; if (splitEmailAddressFragmentCount === 1) { nextEmailAddress += splitEmailAddressFragments[0]; } else { emailAddressArray.push(nextEmailAddress + splitEmailAddressFragments[0]); for (var j = 1; j < splitEmailAddressFragmentCount - 1; j++) { emailAddressArray.push(splitEmailAddressFragments[j]); } nextEmailAddress = splitEmailAddressFragments[splitEmailAddressFragmentCount - 1]; } } else { nextEmailAddress += '"' + quotedFragments[i]; if (i < quotedFragmentCount - 1) { nextEmailAddress += '"'; } } } emailAddressArray.push(nextEmailAddress); return emailAddressArray; } }; }(window.jQuery));