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]))\/((199\d)|([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
To match a date in mm/dd/yyyy format, rearrange the regular expression to ^(0[1-9]|1[012])[- /.] (0[1-9]|[12][0-9]|3[01])[- /.] (19|20)\d\d$. For dd-mm-yyyy format, use ^(0[1-9]|[12][0-9]|3[01])[- /.]
If the variables are of Date object type, we will check whether the getTime() method for the date variable returns a number or not. The getTime() method returns the total number of milliseconds since 1, Jan 1970. If it doesn't return the number, it means the date is not valid.
Try something like this:
function checkDateTime(element){
if (!Date.parse(element.value)){
element.style.background = 'red';
element.focus();
return false;
} else {
element.style.background = 'white';
return true;
}
}
function checkForm(form){
return checkDateTime(form.mytxtfield01) && checkDateTime(form.mytxtfield02)
}
No regular expression; only the function Date.parse('...') is used.
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/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With