Browse Source

Add separator regex option for emailAddress validator.

Kenny Evitt 11 years ago
parent
commit
4a48edf868

+ 1 - 1
dist/css/bootstrapValidator.min.css

@@ -2,7 +2,7 @@
  * BootstrapValidator (http://bootstrapvalidator.com)
  * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3
  *
- * @version     v0.5.1-dev, built on 2014-08-14 3:52:46 PM
+ * @version     v0.5.1-dev, built on 2014-08-20 9:57:29 AM
  * @author      https://twitter.com/nghuuphuoc
  * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
  * @license     MIT

+ 13 - 7
dist/js/bootstrapValidator.js

@@ -2,7 +2,7 @@
  * BootstrapValidator (http://bootstrapvalidator.com)
  * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3
  *
- * @version     v0.5.1-dev, built on 2014-08-14 3:52:46 PM
+ * @version     v0.5.1-dev, built on 2014-08-20 9:57:29 AM
  * @author      https://twitter.com/nghuuphuoc
  * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
  * @license     MIT
@@ -2531,6 +2531,7 @@
          * @param {jQuery} $field Field element
          * @param {Object} [options]
          * - allowMultiple: Allow multiple email addresses, separated by a comma or semicolon; default is false.
+         * - separatorRegex: 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) {
@@ -2546,10 +2547,15 @@
             var allowMultiple = options.allowMultiple === true || options.allowMultiple === 'true';
 
             if (allowMultiple) {
-                return splitEmailAddresses(value).reduce( function(previousValue, currentValue, index, array) {
-                    return previousValue && emailRegExp.test(currentValue);
-                },
-                true);
+                var separatorRegex = options.separatorRegex || /[,;]/;
+                var areValid = true;
+                var addresses = splitEmailAddresses(value, separatorRegex);
+
+                for (var i = 0; i < addresses.length; i++) {
+                    areValid = areValid && emailRegExp.test(addresses[i]);
+                }
+
+                return areValid;
             }
             else {
                 return emailRegExp.test(value);
@@ -2557,7 +2563,7 @@
         }
     };
 
-    function splitEmailAddresses(emailAddresses) {
+    function splitEmailAddresses(emailAddresses, separatorRegex) {
         var quotedFragments = emailAddresses.split(/"/),
             quotedFragmentCount = quotedFragments.length,
             emailAddressArray = [],
@@ -2565,7 +2571,7 @@
 
         for (var i = 0; i < quotedFragmentCount; i++) {
             if (i % 2 === 0) {
-                var splitEmailAddressFragments = quotedFragments[i].split(/[,;]/);
+                var splitEmailAddressFragments = quotedFragments[i].split(separatorRegex);
                 var splitEmailAddressFragmentCount = splitEmailAddressFragments.length;
 
                 if (splitEmailAddressFragmentCount === 1){

File diff suppressed because it is too large
+ 3 - 3
dist/js/bootstrapValidator.min.js


+ 16 - 7
src/js/validator/emailAddress.js

@@ -15,6 +15,7 @@
          * @param {jQuery} $field Field element
          * @param {Object} [options]
          * - allowMultiple: Allow multiple email addresses, separated by a comma or semicolon; default is false.
+         * - separatorRegex: 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) {
@@ -30,10 +31,15 @@
             var allowMultiple = options.allowMultiple === true || options.allowMultiple === 'true';
 
             if (allowMultiple) {
-                return splitEmailAddresses(value).reduce( function(previousValue, currentValue, index, array) {
-                    return previousValue && emailRegExp.test(currentValue);
-                },
-                true);
+                var separatorRegex = options.separatorRegex || /[,;]/;
+                var areValid = true;
+                var addresses = splitEmailAddresses(value, separatorRegex);
+
+                for (var i = 0; i < addresses.length; i++) {
+                    areValid = areValid && emailRegExp.test(addresses[i]);
+                }
+
+                return areValid;
             }
             else {
                 return emailRegExp.test(value);
@@ -41,7 +47,7 @@
         }
     };
 
-    function splitEmailAddresses(emailAddresses) {
+    function splitEmailAddresses(emailAddresses, separatorRegex) {
         var quotedFragments = emailAddresses.split(/"/),
             quotedFragmentCount = quotedFragments.length,
             emailAddressArray = [],
@@ -49,7 +55,7 @@
 
         for (var i = 0; i < quotedFragmentCount; i++) {
             if (i % 2 === 0) {
-                var splitEmailAddressFragments = quotedFragments[i].split(/[,;]/);
+                var splitEmailAddressFragments = quotedFragments[i].split(separatorRegex);
                 var splitEmailAddressFragmentCount = splitEmailAddressFragments.length;
 
                 if (splitEmailAddressFragmentCount === 1){
@@ -66,7 +72,10 @@
                 }
             }
             else {
-                nextEmailAddress += '"' + quotedFragments[i] + '"';
+                nextEmailAddress += '"' + quotedFragments[i];
+
+                if (i < quotedFragmentCount - 1)
+                    nextEmailAddress += '"';
             }
         }
 

+ 85 - 8
test/spec.js

@@ -2321,7 +2321,7 @@ describe('ean', function() {
         expect(this.bv.isValidField('ean')).toEqual(false);
     });
 });
-
+
 describe('emailAddress', function() {
     beforeEach(function () {
         $([
@@ -2368,16 +2368,28 @@ describe('emailAddress', function() {
         'this\ still\"not\\allowed@example.com'
     ];
 
-    var validMultipleEmailAddresses = [
+    var validMultipleEmailAddressesForDefaultSeparators = [
         'niceandsimple@example.com,very.common@example.com',
-        'niceandsimple@example.com;very.common@example.com'
+        'niceandsimple@example.com;very.common@example.com',
+        'niceandsimple@example.com;very.common@example.com,a.little.lengthy.but.fine@dept.example.com'
     ];
 
-    var invalidMultipleEmailAddresses = [
+    var invalidMultipleEmailAddressesForDefaultSeparators = [
         'niceandsimple@example.com+very.common@example.com',
         'niceandsimple@example.com|very.common@example.com'
     ];
 
+    var validMultipleEmailAddressesForCommaOrDollarSignSeparators = [
+        'niceandsimple@example.com,very.common@example.com',
+        'niceandsimple@example.com$very.common@example.com',
+        'niceandsimple@example.com,very.common@example.com$a.little.lengthy.but.fine@dept.example.com'
+    ];
+
+    var invalidMultipleEmailAddressesForCommaOrDollarSignSeparators = [
+        'niceandsimple@example.com;very.common@example.com',
+        'niceandsimple@example.com;very.common@example.com,a.little.lengthy.but.fine@dept.example.com'
+    ];
+
     it('Valid email addresses (allowMultiple=false)', function() {
         var me = this;
         $.each(validEmailAddresses, function(index, emailAddress) {
@@ -2390,7 +2402,32 @@ describe('emailAddress', function() {
 
     it('Invalid email addresses (allowMultiple=false)', function() {
         var me = this;
-        $.each(invalidEmailAddresses.concat(validMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = invalidEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators)
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators)
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators)
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toEqual(false);
+        });
+    });
+
+    it('Invalid email addresses (allowMultiple=false,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,;]/);
+
+        var addresses = invalidEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators)
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators)
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators)
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();
@@ -2401,7 +2438,11 @@ describe('emailAddress', function() {
     it('Valid email addresses (allowMultiple=true)', function() {
         var me = this;
         me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
-        $.each(validEmailAddresses.concat(validMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = validEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();
@@ -2412,7 +2453,43 @@ describe('emailAddress', function() {
     it('Invalid email addresses (allowMultiple=true)', function() {
         var me = this;
         me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
-        $.each(invalidEmailAddresses.concat(invalidMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = invalidEmailAddresses
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toEqual(false);
+        });
+    });
+
+    it('Valid email addresses (allowMultiple=true,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,\$]/);
+
+        var addresses = validEmailAddresses
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toBeTruthy();
+        });
+    });
+
+    it('Invalid email addresses (allowMultiple=true,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,\$]/);
+
+        var addresses = invalidEmailAddresses
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();
@@ -2420,7 +2497,7 @@ describe('emailAddress', function() {
         });
     });
 });
-
+
 function greaterThanCompare() {
     var compareTo = $('#greaterThanForm').find('[name="minAge"]').val();
     $('#msg').html('greaterThanCompare() called; compare to ' + compareTo);

+ 83 - 6
test/spec/validator/emailAddress.js

@@ -44,16 +44,28 @@ describe('emailAddress', function() {
         'this\ still\"not\\allowed@example.com'
     ];
 
-    var validMultipleEmailAddresses = [
+    var validMultipleEmailAddressesForDefaultSeparators = [
         'niceandsimple@example.com,very.common@example.com',
-        'niceandsimple@example.com;very.common@example.com'
+        'niceandsimple@example.com;very.common@example.com',
+        'niceandsimple@example.com;very.common@example.com,a.little.lengthy.but.fine@dept.example.com'
     ];
 
-    var invalidMultipleEmailAddresses = [
+    var invalidMultipleEmailAddressesForDefaultSeparators = [
         'niceandsimple@example.com+very.common@example.com',
         'niceandsimple@example.com|very.common@example.com'
     ];
 
+    var validMultipleEmailAddressesForCommaOrDollarSignSeparators = [
+        'niceandsimple@example.com,very.common@example.com',
+        'niceandsimple@example.com$very.common@example.com',
+        'niceandsimple@example.com,very.common@example.com$a.little.lengthy.but.fine@dept.example.com'
+    ];
+
+    var invalidMultipleEmailAddressesForCommaOrDollarSignSeparators = [
+        'niceandsimple@example.com;very.common@example.com',
+        'niceandsimple@example.com;very.common@example.com,a.little.lengthy.but.fine@dept.example.com'
+    ];
+
     it('Valid email addresses (allowMultiple=false)', function() {
         var me = this;
         $.each(validEmailAddresses, function(index, emailAddress) {
@@ -66,7 +78,32 @@ describe('emailAddress', function() {
 
     it('Invalid email addresses (allowMultiple=false)', function() {
         var me = this;
-        $.each(invalidEmailAddresses.concat(validMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = invalidEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators)
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators)
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators)
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toEqual(false);
+        });
+    });
+
+    it('Invalid email addresses (allowMultiple=false,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,;]/);
+
+        var addresses = invalidEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators)
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators)
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators)
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();
@@ -77,7 +114,11 @@ describe('emailAddress', function() {
     it('Valid email addresses (allowMultiple=true)', function() {
         var me = this;
         me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
-        $.each(validEmailAddresses.concat(validMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = validEmailAddresses
+                            .concat(validMultipleEmailAddressesForDefaultSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();
@@ -88,7 +129,43 @@ describe('emailAddress', function() {
     it('Invalid email addresses (allowMultiple=true)', function() {
         var me = this;
         me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
-        $.each(invalidEmailAddresses.concat(invalidMultipleEmailAddresses), function(index, emailAddress) {
+
+        var addresses = invalidEmailAddresses
+                            .concat(invalidMultipleEmailAddressesForDefaultSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toEqual(false);
+        });
+    });
+
+    it('Valid email addresses (allowMultiple=true,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,\$]/);
+
+        var addresses = validEmailAddresses
+                            .concat(validMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
+            me.bv.resetForm();
+            me.$emailAddressOrAddresses.val(emailAddress);
+            me.bv.validate();
+            expect(me.bv.isValid()).toBeTruthy();
+        });
+    });
+
+    it('Invalid email addresses (allowMultiple=true,separatorRegex=/[,\$]/)', function() {
+        var me = this;
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'allowMultiple', true);
+        me.bv.updateOption('email-address-or-addresses', 'emailAddress', 'separatorRegex', /[,\$]/);
+
+        var addresses = invalidEmailAddresses
+                            .concat(invalidMultipleEmailAddressesForCommaOrDollarSignSeparators);
+
+        $.each(addresses, function(index, emailAddress) {
             me.bv.resetForm();
             me.$emailAddressOrAddresses.val(emailAddress);
             me.bv.validate();