001.
002.
003.
004.
005.
006.
007.
008.
009.
010.
(
function
($) {
011.
012.
$.extend($.inputmask.defaults.definitions, {
013.
'h'
: {
014.
validator:
"[01][0-9]|2[0-3]"
,
015.
cardinality: 2,
016.
prevalidator: [{ validator:
"[0-2]"
, cardinality: 1 }]
017.
},
018.
's'
: {
019.
validator:
"[0-5][0-9]"
,
020.
cardinality: 2,
021.
prevalidator: [{ validator:
"[0-5]"
, cardinality: 1 }]
022.
},
023.
'd'
: {
024.
validator:
"0[1-9]|[12][0-9]|3[01]"
,
025.
cardinality: 2,
026.
prevalidator: [{ validator:
"[0-3]"
, cardinality: 1 }]
027.
},
028.
'm'
: {
029.
validator:
"0[1-9]|1[012]"
,
030.
cardinality: 2,
031.
prevalidator: [{ validator:
"[01]"
, cardinality: 1 }]
032.
},
033.
'y'
: {
034.
validator:
"(19|20)\\d{2}"
,
035.
cardinality: 4,
036.
prevalidator: [
037.
{ validator:
"[12]"
, cardinality: 1 },
038.
{ validator:
"(19|20)"
, cardinality: 2 },
039.
{ validator:
"(19|20)\\d"
, cardinality: 3 }
040.
]
041.
}
042.
});
043.
$.extend($.inputmask.defaults.aliases, {
044.
'dd/mm/yyyy'
: {
045.
mask:
"1/2/y"
,
046.
placeholder:
"dd/mm/yyyy"
,
047.
regex: {
048.
val1pre:
new
RegExp(
"[0-3]"
),
049.
val1:
new
RegExp(
"0[1-9]|[12][0-9]|3[01]"
),
050.
val2pre:
function
(separator) {
var
escapedSeparator = $.inputmask.escapeRegex.call(
this
, separator);
return
new
RegExp(
"((0[1-9]|[12][0-9]|3[01])"
+ escapedSeparator +
"[01])"
); },
051.
val2:
function
(separator) {
var
escapedSeparator = $.inputmask.escapeRegex.call(
this
, separator);
return
new
RegExp(
"((0[1-9]|[12][0-9])"
+ escapedSeparator +
"(0[1-9]|1[012]))|(30"
+ escapedSeparator +
"(0[13-9]|1[012]))|(31"
+ escapedSeparator +
"(0[13578]|1[02]))"
); }
052.
},
053.
leapday:
"29/02/"
,
054.
separator:
'/'
,
055.
yearrange: { minyear: 1900, maxyear: 2099 },
056.
isInYearRange:
function
(chrs, minyear, maxyear) {
057.
var
enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));
058.
var
enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
059.
return
(enteredyear != NaN ? minyear <= enteredyear && enteredyear <= maxyear :
false
) ||
060.
(enteredyear2 != NaN ? minyear <= enteredyear2 && enteredyear2 <= maxyear :
false
);
061.
},
062.
determinebaseyear:
function
(minyear, maxyear, hint) {
063.
var
currentyear = (
new
Date()).getFullYear();
064.
if
(minyear > currentyear)
return
minyear;
065.
if
(maxyear < currentyear) {
066.
var
maxYearPrefix = maxyear.toString().slice(0, 2);
067.
var
maxYearPostfix = maxyear.toString().slice(2, 4);
068.
while
(maxyear < maxYearPrefix + hint) {
069.
maxYearPrefix--;
070.
}
071.
var
maxxYear = maxYearPrefix + maxYearPostfix;
072.
return
minyear > maxxYear ? minyear : maxxYear;
073.
}
074.
075.
return
currentyear;
076.
},
077.
onKeyUp:
function
(e, buffer, opts) {
078.
var
$input = $(
this
);
079.
if
(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
080.
var
today =
new
Date();
081.
$input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
082.
}
083.
},
084.
definitions: {
085.
'1'
: {
086.
validator:
function
(chrs, buffer, pos, strict, opts) {
087.
var
isValid = opts.regex.val1.test(chrs);
088.
if
(!strict && !isValid) {
089.
if
(chrs.charAt(1) == opts.separator ||
"-./"
.indexOf(chrs.charAt(1)) != -1) {
090.
isValid = opts.regex.val1.test(
"0"
+ chrs.charAt(0));
091.
if
(isValid) {
092.
buffer[pos - 1] =
"0"
;
093.
return
{
"pos"
: pos,
"c"
: chrs.charAt(0) };
094.
}
095.
}
096.
}
097.
return
isValid;
098.
},
099.
cardinality: 2,
100.
prevalidator: [{
101.
validator:
function
(chrs, buffer, pos, strict, opts) {
102.
var
isValid = opts.regex.val1pre.test(chrs);
103.
if
(!strict && !isValid) {
104.
isValid = opts.regex.val1.test(
"0"
+ chrs);
105.
if
(isValid) {
106.
buffer[pos] =
"0"
;
107.
pos++;
108.
return
{
"pos"
: pos };
109.
}
110.
}
111.
return
isValid;
112.
}, cardinality: 1
113.
}]
114.
},
115.
'2'
: {
116.
validator:
function
(chrs, buffer, pos, strict, opts) {
117.
var
frontValue = buffer.join(
''
).substr(0, 3);
118.
if
(frontValue.indexOf(opts.placeholder[0]) != -1) frontValue =
"01"
+ opts.separator;
119.
var
isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
120.
if
(!strict && !isValid) {
121.
if
(chrs.charAt(1) == opts.separator ||
"-./"
.indexOf(chrs.charAt(1)) != -1) {
122.
isValid = opts.regex.val2(opts.separator).test(frontValue +
"0"
+ chrs.charAt(0));
123.
if
(isValid) {
124.
buffer[pos - 1] =
"0"
;
125.
return
{
"pos"
: pos,
"c"
: chrs.charAt(0) };
126.
}
127.
}
128.
}
129.
return
isValid;
130.
},
131.
cardinality: 2,
132.
prevalidator: [{
133.
validator:
function
(chrs, buffer, pos, strict, opts) {
134.
var
frontValue = buffer.join(
''
).substr(0, 3);
135.
if
(frontValue.indexOf(opts.placeholder[0]) != -1) frontValue =
"01"
+ opts.separator;
136.
var
isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);
137.
if
(!strict && !isValid) {
138.
isValid = opts.regex.val2(opts.separator).test(frontValue +
"0"
+ chrs);
139.
if
(isValid) {
140.
buffer[pos] =
"0"
;
141.
pos++;
142.
return
{
"pos"
: pos };
143.
}
144.
}
145.
return
isValid;
146.
}, cardinality: 1
147.
}]
148.
},
149.
'y'
: {
150.
validator:
function
(chrs, buffer, pos, strict, opts) {
151.
if
(opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
152.
var
dayMonthValue = buffer.join(
''
).substr(0, 6);
153.
if
(dayMonthValue != opts.leapday)
154.
return
true
;
155.
else
{
156.
var
year = parseInt(chrs, 10);
157.
if
(year % 4 === 0)
158.
if
(year % 100 === 0)
159.
if
(year % 400 === 0)
160.
return
true
;
161.
else
return
false
;
162.
else
return
true
;
163.
else
return
false
;
164.
}
165.
}
else
return
false
;
166.
},
167.
cardinality: 4,
168.
prevalidator: [
169.
{
170.
validator:
function
(chrs, buffer, pos, strict, opts) {
171.
var
isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
172.
if
(!strict && !isValid) {
173.
var
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs +
"0"
).toString().slice(0, 1);
174.
175.
isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
176.
if
(isValid) {
177.
buffer[pos++] = yearPrefix[0];
178.
return
{
"pos"
: pos };
179.
}
180.
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs +
"0"
).toString().slice(0, 2);
181.
182.
isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
183.
if
(isValid) {
184.
buffer[pos++] = yearPrefix[0];
185.
buffer[pos++] = yearPrefix[1];
186.
return
{
"pos"
: pos };
187.
}
188.
}
189.
return
isValid;
190.
},
191.
cardinality: 1
192.
},
193.
{
194.
validator:
function
(chrs, buffer, pos, strict, opts) {
195.
var
isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
196.
if
(!strict && !isValid) {
197.
var
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
198.
199.
isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
200.
if
(isValid) {
201.
buffer[pos++] = yearPrefix[1];
202.
return
{
"pos"
: pos };
203.
}
204.
205.
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
206.
if
(opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
207.
var
dayMonthValue = buffer.join(
''
).substr(0, 6);
208.
if
(dayMonthValue != opts.leapday)
209.
isValid =
true
;
210.
else
{
211.
var
year = parseInt(chrs, 10);
212.
if
(year % 4 === 0)
213.
if
(year % 100 === 0)
214.
if
(year % 400 === 0)
215.
isValid =
true
;
216.
else
isValid =
false
;
217.
else
isValid =
true
;
218.
else
isValid =
false
;
219.
}
220.
}
else
isValid =
false
;
221.
if
(isValid) {
222.
buffer[pos - 1] = yearPrefix[0];
223.
buffer[pos++] = yearPrefix[1];
224.
buffer[pos++] = chrs[0];
225.
return
{
"pos"
: pos };
226.
}
227.
}
228.
return
isValid;
229.
}, cardinality: 2
230.
},
231.
{
232.
validator:
function
(chrs, buffer, pos, strict, opts) {
233.
return
opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
234.
}, cardinality: 3
235.
}
236.
]
237.
}
238.
},
239.
insertMode:
false
,
240.
autoUnmask:
false
241.
},
242.
'mm/dd/yyyy'
: {
243.
placeholder:
"mm/dd/yyyy"
,
244.
alias:
"dd/mm/yyyy"
,
245.
regex: {
246.
val2pre:
function
(separator) {
var
escapedSeparator = $.inputmask.escapeRegex.call(
this
, separator);
return
new
RegExp(
"((0[13-9]|1[012])"
+ escapedSeparator +
"[0-3])|(02"
+ escapedSeparator +
"[0-2])"
); },
247.
val2:
function
(separator) {
var
escapedSeparator = $.inputmask.escapeRegex.call(
this
, separator);
return
new
RegExp(
"((0[1-9]|1[012])"
+ escapedSeparator +
"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])"
+ escapedSeparator +
"30)|((0[13578]|1[02])"
+ escapedSeparator +
"31)"
); },
248.
val1pre:
new
RegExp(
"[01]"
),
249.
val1:
new
RegExp(
"0[1-9]|1[012]"
)
250.
},
251.
leapday:
"02/29/"
,
252.
onKeyUp:
function
(e, buffer, opts) {
253.
var
$input = $(
this
);
254.
if
(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
255.
var
today =
new
Date();
256.
$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
257.
}
258.
}
259.
},
260.
'yyyy/mm/dd'
: {
261.
mask:
"y/1/2"
,
262.
placeholder:
"yyyy/mm/dd"
,
263.
alias:
"mm/dd/yyyy"
,
264.
leapday:
"/02/29"
,
265.
onKeyUp:
function
(e, buffer, opts) {
266.
var
$input = $(
this
);
267.
if
(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
268.
var
today =
new
Date();
269.
$input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
270.
}
271.
},
272.
definitions: {
273.
'2'
: {
274.
validator:
function
(chrs, buffer, pos, strict, opts) {
275.
var
frontValue = buffer.join(
''
).substr(5, 3);
276.
if
(frontValue.indexOf(opts.placeholder[5]) != -1) frontValue =
"01"
+ opts.separator;
277.
var
isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
278.
if
(!strict && !isValid) {
279.
if
(chrs.charAt(1) == opts.separator ||
"-./"
.indexOf(chrs.charAt(1)) != -1) {
280.
isValid = opts.regex.val2(opts.separator).test(frontValue +
"0"
+ chrs.charAt(0));
281.
if
(isValid) {
282.
buffer[pos - 1] =
"0"
;
283.
return
{
"pos"
: pos,
"c"
: chrs.charAt(0) };
284.
}
285.
}
286.
}
287.
288.
289.
if
(isValid) {
290.
var
dayMonthValue = buffer.join(
''
).substr(4, 4) + chrs;
291.
if
(dayMonthValue != opts.leapday)
292.
return
true
;
293.
else
{
294.
var
year = parseInt(buffer.join(
''
).substr(0, 4), 10);
295.
if
(year % 4 === 0)
296.
if
(year % 100 === 0)
297.
if
(year % 400 === 0)
298.
return
true
;
299.
else
return
false
;
300.
else
return
true
;
301.
else
return
false
;
302.
}
303.
}
304.
305.
return
isValid;
306.
},
307.
cardinality: 2,
308.
prevalidator: [{
309.
validator:
function
(chrs, buffer, pos, strict, opts) {
310.
var
frontValue = buffer.join(
''
).substr(5, 3);
311.
if
(frontValue.indexOf(opts.placeholder[5]) != -1) frontValue =
"01"
+ opts.separator;
312.
var
isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);
313.
if
(!strict && !isValid) {
314.
isValid = opts.regex.val2(opts.separator).test(frontValue +
"0"
+ chrs);
315.
if
(isValid) {
316.
buffer[pos] =
"0"
;
317.
pos++;
318.
return
{
"pos"
: pos };
319.
}
320.
}
321.
return
isValid;
322.
}, cardinality: 1
323.
}]
324.
}
325.
}
326.
},
327.
'dd.mm.yyyy'
: {
328.
mask:
"1.2.y"
,
329.
placeholder:
"dd.mm.yyyy"
,
330.
leapday:
"29.02."
,
331.
separator:
'.'
,
332.
alias:
"dd/mm/yyyy"
333.
},
334.
'dd-mm-yyyy'
: {
335.
mask:
"1-2-y"
,
336.
placeholder:
"dd-mm-yyyy"
,
337.
leapday:
"29-02-"
,
338.
separator:
'-'
,
339.
alias:
"dd/mm/yyyy"
340.
},
341.
'mm.dd.yyyy'
: {
342.
mask:
"1.2.y"
,
343.
placeholder:
"mm.dd.yyyy"
,
344.
leapday:
"02.29."
,
345.
separator:
'.'
,
346.
alias:
"mm/dd/yyyy"
347.
},
348.
'mm-dd-yyyy'
: {
349.
mask:
"1-2-y"
,
350.
placeholder:
"mm-dd-yyyy"
,
351.
leapday:
"02-29-"
,
352.
separator:
'-'
,
353.
alias:
"mm/dd/yyyy"
354.
},
355.
'yyyy.mm.dd'
: {
356.
mask:
"y.1.2"
,
357.
placeholder:
"yyyy.mm.dd"
,
358.
leapday:
".02.29"
,
359.
separator:
'.'
,
360.
alias:
"yyyy/mm/dd"
361.
},
362.
'yyyy-mm-dd'
: {
363.
mask:
"y-1-2"
,
364.
placeholder:
"yyyy-mm-dd"
,
365.
leapday:
"-02-29"
,
366.
separator:
'-'
,
367.
alias:
"yyyy/mm/dd"
368.
},
369.
'datetime'
: {
370.
mask:
"1/2/y h:s"
,
371.
placeholder:
"dd/mm/yyyy hh:mm"
,
372.
alias:
"dd/mm/yyyy"
,
373.
regex: {
374.
hrspre:
new
RegExp(
"[012]"
),
375.
hrs24:
new
RegExp(
"2[0-9]|1[3-9]"
),
376.
hrs:
new
RegExp(
"[01][0-9]|2[0-3]"
),
377.
ampm:
new
RegExp(
"^[a|p|A|P][m|M]"
)
378.
},
379.
timeseparator:
':'
,
380.
hourFormat:
"24"
,
381.
definitions: {
382.
'h'
: {
383.
validator:
function
(chrs, buffer, pos, strict, opts) {
384.
var
isValid = opts.regex.hrs.test(chrs);
385.
if
(!strict && !isValid) {
386.
if
(chrs.charAt(1) == opts.timeseparator ||
"-.:"
.indexOf(chrs.charAt(1)) != -1) {
387.
isValid = opts.regex.hrs.test(
"0"
+ chrs.charAt(0));
388.
if
(isValid) {
389.
buffer[pos - 1] =
"0"
;
390.
buffer[pos] = chrs.charAt(0);
391.
pos++;
392.
return
{
"pos"
: pos };
393.
}
394.
}
395.
}
396.
397.
if
(isValid && opts.hourFormat !==
"24"
&& opts.regex.hrs24.test(chrs)) {
398.
399.
var
tmp = parseInt(chrs, 10);
400.
401.
if
(tmp == 24) {
402.
buffer[pos + 5] =
"a"
;
403.
buffer[pos + 6] =
"m"
;
404.
}
else
{
405.
buffer[pos + 5] =
"p"
;
406.
buffer[pos + 6] =
"m"
;
407.
}
408.
409.
tmp = tmp - 12;
410.
411.
if
(tmp < 10) {
412.
buffer[pos] = tmp.toString();
413.
buffer[pos - 1] =
"0"
;
414.
}
else
{
415.
buffer[pos] = tmp.toString().charAt(1);
416.
buffer[pos - 1] = tmp.toString().charAt(0);
417.
}
418.
419.
return
{
"pos"
: pos,
"c"
: buffer[pos] };
420.
}
421.
422.
return
isValid;
423.
},
424.
cardinality: 2,
425.
prevalidator: [{
426.
validator:
function
(chrs, buffer, pos, strict, opts) {
427.
var
isValid = opts.regex.hrspre.test(chrs);
428.
if
(!strict && !isValid) {
429.
isValid = opts.regex.hrs.test(
"0"
+ chrs);
430.
if
(isValid) {
431.
buffer[pos] =
"0"
;
432.
pos++;
433.
return
{
"pos"
: pos };
434.
}
435.
}
436.
return
isValid;
437.
}, cardinality: 1
438.
}]
439.
},
440.
't'
: {
441.
validator:
function
(chrs, buffer, pos, strict, opts) {
442.
return
opts.regex.ampm.test(chrs +
"m"
);
443.
},
444.
casing:
"lower"
,
445.
cardinality: 1
446.
}
447.
},
448.
insertMode:
false
,
449.
autoUnmask:
false
450.
},
451.
'datetime12'
: {
452.
mask:
"1/2/y h:s t\\m"
,
453.
placeholder:
"dd/mm/yyyy hh:mm xm"
,
454.
alias:
"datetime"
,
455.
hourFormat:
"12"
456.
},
457.
'hh:mm t'
: {
458.
mask:
"h:s t\\m"
,
459.
placeholder:
"hh:mm xm"
,
460.
alias:
"datetime"
,
461.
hourFormat:
"12"
462.
},
463.
'h:s t'
: {
464.
mask:
"h:s t\\m"
,
465.
placeholder:
"hh:mm xm"
,
466.
alias:
"datetime"
,
467.
hourFormat:
"12"
468.
},
469.
'hh:mm:ss'
: {
470.
mask:
"h:s:s"
,
471.
autoUnmask:
false
472.
},
473.
'hh:mm'
: {
474.
mask:
"h:s"
,
475.
autoUnmask:
false
476.
},
477.
'date'
: {
478.
alias:
"dd/mm/yyyy"
479.
},
480.
'mm/yyyy'
: {
481.
mask:
"1/y"
,
482.
placeholder:
"mm/yyyy"
,
483.
leapday:
"donotuse"
,
484.
separator:
'/'
,
485.
alias:
"mm/dd/yyyy"
486.
}
487.
});
488.
})(jQuery);