Browse Source

added autofill for day in dd/mm/yyyy alias - others will follow

Robin Herbots 13 years ago
parent
commit
5025d9a87c
1 changed files with 189 additions and 169 deletions
  1. 189 169
      jquery.inputmask.extentions.js

+ 189 - 169
jquery.inputmask.extentions.js

@@ -51,72 +51,42 @@ Optional extentions on the jquery.inputmask base
             placeholder: "dd/mm/yyyy",
             regex: {
                 month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
-                year: new RegExp("(19|20)\\d\\d")
-            },
-            definitions: {
-                'm': { //month
-                    validator: function(chrs, buffer, pos, opts) {
-                        var dayValue = buffer.join('').substr(0, 3);
-                        return opts.regex.month.test(dayValue + chrs);
-                    },
-                    cardinality: 2,
-                    prevalidator: [{ validator: "[01]", cardinality: 1}]
-                },
-                'y': { //year
-                    validator: function(chrs, buffer, pos, opts) {
-                        if (opts.regex.year.test(chrs)) {
-                            var dayMonthValue = buffer.join('').substr(0, 6);
-                            if (dayMonthValue != "29/02/")
-                                return true;
-                            else {
-                                var year = parseInt(chrs);  //detect leap year
-                                if (year % 4 == 0)
-                                    if (year % 100 == 0)
-                                    if (year % 400 == 0)
-                                    return true;
-                                else return false;
-                                else return true;
-                                else return false;
-                            }
-                        } else return false;
-                    },
-                    cardinality: 4,
-                    prevalidator: [
-                        { validator: "[12]", cardinality: 1 },
-                        { validator: "(19|20)", cardinality: 2 },
-                        { validator: "(19|20)\\d", cardinality: 3 }
-                        ]
-                }
-            },
-            insertMode: false,
-            autoUnmask: false
-        },
-        'mm/dd/yyyy': {
-            mask: "m/d/y",
-            placeholder: "mm/dd/yyyy",
-            regex: {
-                day: new RegExp("((0[1-9]|1[012])\/(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\/30)|((0[13578]|1[02])\/31)"),
-                daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
-                year: new RegExp("(19|20)\\d\\d")
+                year: new RegExp("(19|20)\\d\\d"),
+                daypre: new RegExp("[0-3]"),
+                day: new RegExp("0[1-9]|[12][0-9]|3[01]")
             },
             definitions: {
                 'd': { //day
-                    validator: function(chrs, buffer, pos, opts) {
-                        var monthValue = buffer.join('').substr(0, 3);
-                        return opts.regex.day.test(monthValue + chrs);
+                    validator: function(chrs, buffer, pos, strict, opts) {
+                        return opts.regex.day.test(chrs);
                     },
                     cardinality: 2,
-                    prevalidator: [{ validator: function(chrs, buffer, pos, opts) {
-                        var monthValue = buffer.join('').substr(0, 3);
-                        return opts.regex.daypre.test(monthValue + chrs);
+                    prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
+                        var isValid = opts.regex.daypre.test(chrs);
+                        if (!strict && !isValid) {
+                            isValid = opts.regex.day.test("0" + chrs);
+                            if (isValid) {
+                                buffer[pos] = "0";
+                                pos++;
+                                return pos;
+                            }
+                        }
+                        return isValid;
+                    }, cardinality: 1}]
                     },
-                        cardinality: 1}]
+                    'm': { //month
+                        validator: function(chrs, buffer, pos, strict, opts) {
+                            var dayValue = buffer.join('').substr(0, 3);
+                            return opts.regex.month.test(dayValue + chrs);
+                        },
+                        cardinality: 2,
+                        prevalidator: [{ validator: "[01]", cardinality: 1}]
                     },
                     'y': { //year
-                        validator: function(chrs, buffer, pos, opts) {
+                        validator: function(chrs, buffer, pos, strict, opts) {
                             if (opts.regex.year.test(chrs)) {
-                                var monthDayValue = buffer.join('').substr(0, 6);
-                                if (monthDayValue != "02/29/")
+                                var dayMonthValue = buffer.join('').substr(0, 6);
+                                if (dayMonthValue != "29/02/")
                                     return true;
                                 else {
                                     var year = parseInt(chrs);  //detect leap year
@@ -141,134 +111,184 @@ Optional extentions on the jquery.inputmask base
                 insertMode: false,
                 autoUnmask: false
             },
-            'hh:mm:ss': {
-                mask: "h:s:s",
-                autoUnmask: false
-            },
-            'hh:mm': {
-                mask: "h:s",
-                autoUnmask: false
-            },
-            'date': {
-                alias: "dd/mm/yyyy" // "mm/dd/yyyy"
-            },
-            'datetime': {
-                mask: "d/m/y h:s",
-                placeholder: "dd/mm/yyyy hh:mm",
+            'mm/dd/yyyy': {
+                mask: "m/d/y",
+                placeholder: "mm/dd/yyyy",
                 regex: {
-                    month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
+                    day: new RegExp("((0[1-9]|1[012])\/(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\/30)|((0[13578]|1[02])\/31)"),
+                    daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
                     year: new RegExp("(19|20)\\d\\d")
                 },
                 definitions: {
-                    'm': { //month
-                        validator: function(chrs, buffer, pos, opts) {
-                            var dayValue = buffer.join('').substr(0, 3);
-                            return opts.regex.month.test(dayValue + chrs);
+                    'd': { //day
+                        validator: function(chrs, buffer, pos, strict, opts) {
+                            var monthValue = buffer.join('').substr(0, 3);
+                            return opts.regex.day.test(monthValue + chrs);
                         },
                         cardinality: 2,
-                        prevalidator: [{ validator: "[01]", cardinality: 1}]
-                    },
-                    'y': { //year
-                        validator: function(chrs, buffer, pos, opts) {
-                            if (opts.regex.year.test(chrs)) {
-                                var dayMonthValue = buffer.join('').substr(0, 6);
-                                if (dayMonthValue != "29/02/")
-                                    return true;
-                                else {
-                                    var year = parseInt(chrs);  //detect leap year
-                                    if (year % 4 == 0)
-                                        if (year % 100 == 0)
-                                        if (year % 400 == 0)
-                                        return true;
-                                    else return false;
-                                    else return true;
-                                    else return false;
-                                }
-                            } else return false;
+                        prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
+                            var monthValue = buffer.join('').substr(0, 3);
+                            return opts.regex.daypre.test(monthValue + chrs);
                         },
-                        cardinality: 4,
-                        prevalidator: [
+                            cardinality: 1}]
+                        },
+                        'y': { //year
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                if (opts.regex.year.test(chrs)) {
+                                    var monthDayValue = buffer.join('').substr(0, 6);
+                                    if (monthDayValue != "02/29/")
+                                        return true;
+                                    else {
+                                        var year = parseInt(chrs);  //detect leap year
+                                        if (year % 4 == 0)
+                                            if (year % 100 == 0)
+                                            if (year % 400 == 0)
+                                            return true;
+                                        else return false;
+                                        else return true;
+                                        else return false;
+                                    }
+                                } else return false;
+                            },
+                            cardinality: 4,
+                            prevalidator: [
                         { validator: "[12]", cardinality: 1 },
                         { validator: "(19|20)", cardinality: 2 },
                         { validator: "(19|20)\\d", cardinality: 3 }
                         ]
-                    }
+                        }
+                    },
+                    insertMode: false,
+                    autoUnmask: false
                 },
-                insertMode: false,
-                autoUnmask: false
-            },
-            //number aliases by Dean (datimson)
-            'decimal': {
-                mask: "~",
-                placeholder: "",
-                repeat: 10,
-                greedy: false,
-                radixPoint: "\.", // | ","
-                regex: {
-                    real: function(radixPoint) { return new RegExp("^([\+\-]?[0-9]*[" + radixPoint + "]?[0-9]*)$"); }
+                'hh:mm:ss': {
+                    mask: "h:s:s",
+                    autoUnmask: false
                 },
-                definitions: {
-                    '~': { //real number
-                        validator: function(chrs, buffer, pos, opts) {
-                            var myBuffer = buffer.slice();
-                            myBuffer.splice(pos, 0, chrs);
-                            var test = myBuffer.join('');
-                            var isValid = opts.regex.real(opts.radixPoint).test(test);
-                            return isValid;
-                        },
-                        cardinality: 1,
-                        prevalidator: null
-                    }
+                'hh:mm': {
+                    mask: "h:s",
+                    autoUnmask: false
                 },
-                insertMode: true
-            },
-            'non-negative-decimal': {
-                mask: "~",
-                placeholder: "",
-                repeat: 10,
-                greedy: false,
-                radixPoint: "\.", // | ","
-                regex: {
-                    decimal: function(radixPoint) { return new RegExp("^([0-9]+[" + radixPoint + "]?[0-9]*)$"); }
+                'date': {
+                    alias: "dd/mm/yyyy" // "mm/dd/yyyy"
                 },
-                definitions: {
-                    '~': {
-                        validator: function(chrs, buffer, pos, opts) {
-                            var myBuffer = buffer.slice();
-                            myBuffer.splice(pos, 0, chrs);
-                            var test = myBuffer.join('');
-                            var isValid = opts.regex.decimal(opts.radixPoint).test(test);
-                            return isValid;
+                'datetime': {
+                    mask: "d/m/y h:s",
+                    placeholder: "dd/mm/yyyy hh:mm",
+                    regex: {
+                        month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
+                        year: new RegExp("(19|20)\\d\\d")
+                    },
+                    definitions: {
+                        'm': { //month
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                var dayValue = buffer.join('').substr(0, 3);
+                                return opts.regex.month.test(dayValue + chrs);
+                            },
+                            cardinality: 2,
+                            prevalidator: [{ validator: "[01]", cardinality: 1}]
                         },
-                        cardinality: 1,
-                        prevalidator: null
-                    }
+                        'y': { //year
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                if (opts.regex.year.test(chrs)) {
+                                    var dayMonthValue = buffer.join('').substr(0, 6);
+                                    if (dayMonthValue != "29/02/")
+                                        return true;
+                                    else {
+                                        var year = parseInt(chrs);  //detect leap year
+                                        if (year % 4 == 0)
+                                            if (year % 100 == 0)
+                                            if (year % 400 == 0)
+                                            return true;
+                                        else return false;
+                                        else return true;
+                                        else return false;
+                                    }
+                                } else return false;
+                            },
+                            cardinality: 4,
+                            prevalidator: [
+                        { validator: "[12]", cardinality: 1 },
+                        { validator: "(19|20)", cardinality: 2 },
+                        { validator: "(19|20)\\d", cardinality: 3 }
+                        ]
+                        }
+                    },
+                    insertMode: false,
+                    autoUnmask: false
                 },
-                insertMode: true
-            },
-            'integer': {
-                mask: "~",
-                placeholder: "",
-                repeat: 10,
-                greedy: false,
-                numericInput: true,
-                regex: {
-                    integer: new RegExp("^([\+\-]?[0-9]*)$")
+                //number aliases by Dean (datimson)
+                'decimal': {
+                    mask: "~",
+                    placeholder: "",
+                    repeat: 10,
+                    greedy: false,
+                    radixPoint: "\.", // | ","
+                    regex: {
+                        real: function(radixPoint) { return new RegExp("^([\+\-]?[0-9]*[" + radixPoint + "]?[0-9]*)$"); }
+                    },
+                    definitions: {
+                        '~': { //real number
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                var myBuffer = buffer.slice();
+                                myBuffer.splice(pos, 0, chrs);
+                                var test = myBuffer.join('');
+                                var isValid = opts.regex.real(opts.radixPoint).test(test);
+                                return isValid;
+                            },
+                            cardinality: 1,
+                            prevalidator: null
+                        }
+                    },
+                    insertMode: true
                 },
-                definitions: {
-                    '~': {
-                        validator: function(chrs, buffer, pos, opts) {
-                            var myBuffer = buffer.slice();
-                            myBuffer.splice(pos, 0, chrs);
-                            var test = myBuffer.join('');
-                            var isValid = opts.regex.integer.test(test);
-                            return isValid;
-                        },
-                        cardinality: 1,
-                        prevalidator: null
-                    }
+                'non-negative-decimal': {
+                    mask: "~",
+                    placeholder: "",
+                    repeat: 10,
+                    greedy: false,
+                    radixPoint: "\.", // | ","
+                    regex: {
+                        decimal: function(radixPoint) { return new RegExp("^([0-9]+[" + radixPoint + "]?[0-9]*)$"); }
+                    },
+                    definitions: {
+                        '~': {
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                var myBuffer = buffer.slice();
+                                myBuffer.splice(pos, 0, chrs);
+                                var test = myBuffer.join('');
+                                var isValid = opts.regex.decimal(opts.radixPoint).test(test);
+                                return isValid;
+                            },
+                            cardinality: 1,
+                            prevalidator: null
+                        }
+                    },
+                    insertMode: true
                 },
-                insertMode: true
-            }
-        });
-    })(jQuery);
+                'integer': {
+                    mask: "~",
+                    placeholder: "",
+                    repeat: 10,
+                    greedy: false,
+                    numericInput: true,
+                    regex: {
+                        integer: new RegExp("^([\+\-]?[0-9]*)$")
+                    },
+                    definitions: {
+                        '~': {
+                            validator: function(chrs, buffer, pos, strict, opts) {
+                                var myBuffer = buffer.slice();
+                                myBuffer.splice(pos, 0, chrs);
+                                var test = myBuffer.join('');
+                                var isValid = opts.regex.integer.test(test);
+                                return isValid;
+                            },
+                            cardinality: 1,
+                            prevalidator: null
+                        }
+                    },
+                    insertMode: true
+                }
+            });
+        })(jQuery);