Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
30
rated 0 times [  35] [ 5]  / answers: 1 / hits: 37968  / 11 Years ago, tue, january 7, 2014, 12:00:00

I am trying to validate textbox with valid datetime format. I need to check 24 hours datetime format. So i input following text to my textbox 22.05.2013 11:23:22



But it still doesnt validate it correctly. I am totally new to regex. This is so far i have tried



$('#test1').blur(function(){
var validTime = $(this).val().match(/^[0,1]?d/(([0-2]?d)|([3][01]))/((199d)|([2-9]d{3}))s[0-2]?[0-9]:[0-5][0-9]?$/);
debugger;
if (!validTime) {
$(this).val('').focus().css('background', '#fdd');
} else {
$(this).css('background', 'transparent');
}
});


This is my fiddle


More From » regex

 Answers
15

It's very hard to validate a date with a regular expression. How do you validate 29th of February for instance? (it's hard!)



Instead I would you use the built-in Date object. It will always produce a valid date. If you do:



var date = new Date(2010, 1, 30); // 30 feb (doesn't exist!)
// Mar 02 2010


So you'll know it's invalid. You see it overflows to March, this works for all the parameters. If your seconds is >59 it will overflow to minutes etc.



Full solution:



var value = 22.05.2013 11:23:22;
// capture all the parts
var matches = value.match(/^(d{2}).(d{2}).(d{4}) (d{2}):(d{2}):(d{2})$/);
//alt:
// value.match(/^(d{2}).(d{2}).(d{4}).(d{2}).(d{2}).(d{2})$/);
// also matches 22/05/2013 11:23:22 and 22a0592013,11@23a22
if (matches === null) {
// invalid
} else{
// now lets check the date sanity
var year = parseInt(matches[3], 10);
var month = parseInt(matches[2], 10) - 1; // months are 0-11
var day = parseInt(matches[1], 10);
var hour = parseInt(matches[4], 10);
var minute = parseInt(matches[5], 10);
var second = parseInt(matches[6], 10);
var date = new Date(year, month, day, hour, minute, second);
if (date.getFullYear() !== year
|| date.getMonth() != month
|| date.getDate() !== day
|| date.getHours() !== hour
|| date.getMinutes() !== minute
|| date.getSeconds() !== second
) {
// invalid
} else {
// valid
}

}


JSFiddle: http://jsfiddle.net/Evaqk/117/


[#73335] Sunday, January 5, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
odaliss

Total Points: 342
Total Questions: 102
Total Answers: 98

Location: The Bahamas
Member since Tue, Apr 27, 2021
3 Years ago
;