emailAddress.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. (function($) {
  2. $.fn.bootstrapValidator.i18n.emailAddress = $.extend($.fn.bootstrapValidator.i18n.emailAddress || {}, {
  3. 'default': 'Please enter a valid email address'
  4. });
  5. $.fn.bootstrapValidator.validators.emailAddress = {
  6. html5Attributes: {
  7. message: 'message',
  8. multiple: 'multiple',
  9. separator: 'separator'
  10. },
  11. enableByHtml5: function($field) {
  12. return ('email' === $field.attr('type'));
  13. },
  14. /**
  15. * Return true if and only if the input value is a valid email address
  16. *
  17. * @param {BootstrapValidator} validator Validate plugin instance
  18. * @param {jQuery} $field Field element
  19. * @param {Object} [options]
  20. * - multiple: Allow multiple email addresses, separated by a comma or semicolon; default is false.
  21. * - separator: Regex for character or characters expected as separator between addresses; default is comma /[,;]/, i.e. comma or semicolon.
  22. * @returns {Boolean}
  23. */
  24. validate: function(validator, $field, options) {
  25. var value = $field.val();
  26. if (value === '') {
  27. return true;
  28. }
  29. // Email address regular expression
  30. // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
  31. 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])?)*$/,
  32. allowMultiple = options.multiple === true || options.multiple === 'true';
  33. if (allowMultiple) {
  34. var separator = options.separator || /[,;]/,
  35. addresses = this._splitEmailAddresses(value, separator);
  36. for (var i = 0; i < addresses.length; i++) {
  37. if (!emailRegExp.test(addresses[i])) {
  38. return false;
  39. }
  40. }
  41. return true;
  42. } else {
  43. return emailRegExp.test(value);
  44. }
  45. },
  46. _splitEmailAddresses: function(emailAddresses, separator) {
  47. var quotedFragments = emailAddresses.split(/"/),
  48. quotedFragmentCount = quotedFragments.length,
  49. emailAddressArray = [],
  50. nextEmailAddress = '';
  51. for (var i = 0; i < quotedFragmentCount; i++) {
  52. if (i % 2 === 0) {
  53. var splitEmailAddressFragments = quotedFragments[i].split(separator),
  54. splitEmailAddressFragmentCount = splitEmailAddressFragments.length;
  55. if (splitEmailAddressFragmentCount === 1) {
  56. nextEmailAddress += splitEmailAddressFragments[0];
  57. } else {
  58. emailAddressArray.push(nextEmailAddress + splitEmailAddressFragments[0]);
  59. for (var j = 1; j < splitEmailAddressFragmentCount - 1; j++) {
  60. emailAddressArray.push(splitEmailAddressFragments[j]);
  61. }
  62. nextEmailAddress = splitEmailAddressFragments[splitEmailAddressFragmentCount - 1];
  63. }
  64. } else {
  65. nextEmailAddress += '"' + quotedFragments[i];
  66. if (i < quotedFragmentCount - 1) {
  67. nextEmailAddress += '"';
  68. }
  69. }
  70. }
  71. emailAddressArray.push(nextEmailAddress);
  72. return emailAddressArray;
  73. }
  74. };
  75. }(window.jQuery));