Browse Source

#218, #531: Add meid validator, thanks to @troymccabe

phuoc 11 years ago
parent
commit
88f406b4b1

+ 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-07-19 8:09:01 AM
+ * @version     v0.5.1-dev, built on 2014-07-19 8:53:51 AM
  * @author      https://twitter.com/nghuuphuoc
  * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
  * @license     MIT

+ 84 - 1
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-07-19 8:09:01 AM
+ * @version     v0.5.1-dev, built on 2014-07-19 8:53:51 AM
  * @author      https://twitter.com/nghuuphuoc
  * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc
  * @license     MIT
@@ -4307,6 +4307,89 @@
     };
 }(window.jQuery));
 ;(function($) {
+    $.fn.bootstrapValidator.i18n.meid = $.extend($.fn.bootstrapValidator.i18n.meid || {}, {
+        'default': 'Please enter a valid MEID number'
+    });
+
+    $.fn.bootstrapValidator.validators.meid = {
+        /**
+         * Validate MEID (Mobile Equipment Identifier)
+         * Examples:
+         * - Valid: 293608736500703710, 29360-87365-0070-3710, AF0123450ABCDE, AF-012345-0ABCDE
+         * - Invalid: 2936087365007037101
+         *
+         * @see http://en.wikipedia.org/wiki/Mobile_equipment_identifier
+         * @param {BootstrapValidator} validator The validator plugin instance
+         * @param {jQuery} $field Field element
+         * @param {Object} options Can consist of the following keys:
+         * - message: The invalid message
+         * @returns {Boolean}
+         */
+        validate: function(validator, $field, options) {
+            var value = $field.val();
+            if (value === '') {
+                return true;
+            }
+
+            switch (true) {
+                // 14 digit hex representation (no check digit)
+                case /^[0-9A-F]{15}$/i.test(value):
+                // 14 digit hex representation + dashes or spaces (no check digit)
+                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}[- ][0-9A-F]$/i.test(value):
+                // 18 digit decimal representation (no check digit)
+                case /^\d{19}$/.test(value):
+                // 18 digit decimal representation + dashes or spaces (no check digit)
+                case /^\d{5}[- ]\d{5}[- ]\d{4}[- ]\d{4}[- ]\d$/.test(value):
+                    // Grab the check digit
+                    var cd = value.charAt(value.length - 1);
+
+                    // Strip any non-hex chars
+                    value = value.replace(/[- ]/g, '');
+
+                    // If it's all digits, luhn base 10 is used
+                    if (value.match(/^\d*$/i)) {
+                        return $.fn.bootstrapValidator.helpers.luhn(value);
+                    }
+
+                    // Strip the check digit
+                    value = value.slice(0, -1);
+
+                    // Get every other char, and double it
+                    var cdCalc = '';
+                    for (var i = 1; i <= 13; i += 2) {
+                        cdCalc += (parseInt(value.charAt(i), 16) * 2).toString(16);
+                    }
+
+                    // Get the sum of each char in the string
+                    var sum = 0;
+                    for (i = 0; i < cdCalc.length; i++) {
+                        sum += parseInt(cdCalc.charAt(i), 16);
+                    }
+
+                    // If the last digit of the calc is 0, the check digit is 0
+                    return (sum % 10 === 0)
+                            ? (cd === '0')
+                            // Subtract it from the next highest 10s number (64 goes to 70) and subtract the sum
+                            // Double it and turn it into a hex char
+                            : (cd === ((Math.floor((sum + 10) / 10) * 10 - sum) * 2).toString(16));
+
+                // 14 digit hex representation (no check digit)
+                case /^[0-9A-F]{14}$/i.test(value):
+                // 14 digit hex representation + dashes or spaces (no check digit)
+                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}$/i.test(value):
+                // 18 digit decimal representation (no check digit)
+                case /^\d{18}$/.test(value):
+                // 18 digit decimal representation + dashes or spaces (no check digit)
+                case /^\d{5}[- ]\d{5}[- ]\d{4}[- ]\d{4}$/.test(value):
+                    return true;
+
+                default:
+                    return false;
+            }
+        }
+    };
+}(window.jQuery));
+;(function($) {
     $.fn.bootstrapValidator.i18n.notEmpty = $.extend($.fn.bootstrapValidator.i18n.notEmpty || {}, {
         'default': 'Please enter a value'
     });

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


+ 3 - 0
dist/js/language/be_NL.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Geef een geldig MAC adres'
         },
+        meid: {
+            'default': 'Geef een geldig MEID nummer'
+        },
         notEmpty: {
             'default': 'Geef een waarde'
         },

+ 3 - 0
dist/js/language/bg_BG.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Моля, въведете валиден MAC адрес'
         },
+        meid: {
+            'default': 'Моля, въведете валиден MEID номер'
+        },
         notEmpty: {
             'default': 'Моля, въведете стойност'
         },

+ 3 - 0
dist/js/language/cs_CZ.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Prosím zadejte správnou MAC adresu'
         },
+        meid: {
+            'default': 'Prosím zadejte správné MEID číslo'
+        },
         notEmpty: {
             'default': 'Toto pole nesmí být prázdné'
         },

+ 3 - 0
dist/js/language/de_DE.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Bitte gültige MAC Adresse eingeben'
         },
+        meid: {
+            'default': 'Bitte gültige MEID Nummer eingeben'
+        },
         notEmpty: {
             'default': 'Bitte Wert eingeben'
         },

+ 4 - 2
dist/js/language/en_US.js

@@ -1,7 +1,6 @@
 (function($) {
     /**
-     * Default English package
-     * It's included in the dist, so you do NOT need to include it to your head tag
+     * Default English package. It's included in the dist, so you do NOT need to include it to your head tag
      * The only reason I put it here is that you can clone it, and translate it into your language
      */
     $.fn.bootstrapValidator.i18n = $.extend(true, $.fn.bootstrapValidator.i18n, {
@@ -212,6 +211,9 @@
         mac: {
             'default': 'Please enter a valid MAC address'
         },
+        meid: {
+            'default': 'Please enter a valid MEID number'
+        },
         notEmpty: {
             'default': 'Please enter a value'
         },

+ 3 - 0
dist/js/language/es_CL.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Por favor ingrese una dirección MAC válida'
         },
+        meid: {
+            'default': 'Por favor ingrese un número MEID válido'
+        },
         notEmpty: {
             'default': 'Por favor ingrese un valor'
         },

+ 3 - 0
dist/js/language/fr_FR.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Veuillez fournir une adresse MAC valide'
         },
+        meid: {
+            'default': 'Veuillez fournir un code MEID valide'
+        },
         notEmpty: {
             'default': 'Veuillez fournir une valeur'
         },

+ 3 - 0
dist/js/language/hu_HU.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Kérlek, hogy érvényes MAC címet ajd meg'
         },
+        meid: {
+            'default': 'Kérlek, hogy érvényes MEID számot ajd meg'
+        },
         notEmpty: {
             'default': 'Kérlek, hogy adj értéket a mezőnek'
         },

+ 3 - 0
dist/js/language/pl_PL.js

@@ -211,6 +211,9 @@
         mac: {
             'default': 'Wprowadź poprawny adres MAC'
         },
+        meid: {
+            'default': 'Wprowadź porpawny numer MEID'
+        },
         notEmpty: {
             'default': 'Wprowadź wartość, pole nie może być puste'
         },

+ 7 - 0
dist/js/language/vi_VN.js

@@ -1,4 +1,8 @@
 (function($) {
+    /**
+     * Vietnamese language package
+     * Translated by @nghuuphuoc
+     */
     $.fn.bootstrapValidator.i18n = $.extend(true, $.fn.bootstrapValidator.i18n, {
         base64: {
             'default': 'Vui lòng nhập chuỗi mã hoá base64 hợp lệ'
@@ -207,6 +211,9 @@
         mac: {
             'default': 'Vui lòng nhập địa chỉ MAC hợp lệ'
         },
+        meid: {
+            'default': 'Vui lòng nhập số MEID hợp lệ'
+        },
         notEmpty: {
             'default': 'Vui lòng nhập giá trị'
         },

+ 4 - 1
dist/js/language/zh_CN.js

@@ -211,7 +211,10 @@
         mac: {
             'default': '请输入有效的MAC位址'
         },
-        notEmpty: {
+        meid: {
+            'default': '请输入有效的MEID'
+        },
+        notEmpty: {
             'default': '栏位不能为空'
         },
         numeric: {

+ 3 - 0
dist/js/language/zh_TW.js

@@ -211,6 +211,9 @@
         mac: {
             'default': '請輸入有效的MAC位址'
         },
+        meid: {
+            'default': '請輸入有效的MEID'
+        },
         notEmpty: {
             'default': '欄位不能為空'
         },

+ 1 - 1
test/spec.js

@@ -3574,7 +3574,7 @@ describe('meid', function() {
 
         $('#meidForm').bootstrapValidator();
 
-        this.bv   = $('#meidForm').data('bootstrapValidator');
+        this.bv    = $('#meidForm').data('bootstrapValidator');
         this.$meid = this.bv.getFieldElements('meid');
     });