我想验证日期,如30/02/2014和30/09/2014我如何使用正则表达式验证这些日期。
您可以调用下面的方法,并根据自己的需要适当使用
function validateRealDates(date){
var dateNumbers = date.split("/");
if(dateNumbers[0] > 12){
var $1 = dateNumbers[2];
var $2 = dateNumbers[1];
var $3 = dateNumbers[0];
}else{
if(dateNumbers[0] < 12){
var $1 = dateNumbers[2];
var $2 = dateNumbers[0];
var $3 = dateNumbers[1];
}else{
var dateNumbers = date.split("-");
var newMonth;
var month = dateNumbers[1];
switch (month) {
case "Jan":
newMonth = 1;
break;
case "Feb":
newMonth = 2;
break;
case "Mar":
newMonth = 3;
break;
case "Apr":
newMonth = 4;
break;
case "May":
newMonth = 5;
break;
case "Jun":
newMonth = 6;
break;
case "Jul":
newMonth = 7;
break;
case "Aug":
newMonth = 8;
break;
case "Sep":
newMonth = 9;
break;
case "Oct":
newMonth = 10;
break;
case "Nov":
newMonth = 11;
break;
case "Dec":
newMonth = 12;
break;
default:
break;
}
dateNumbers[1] = newMonth
var $1 = dateNumbers[2];
var $2 = dateNumbers[1];
var $3 = dateNumbers[0];
}
}
if ($3 == 31 && ($2 == 4 || $2 == 6 || $2 == 9 || $2 == 11)) {
return false;
}else{
if ($3 >= 30 && $2 == 2) {
return false;
}else{
if ($2 == 2 && $3 == 29 && !($1 % 4 == 0 && ($1 % 100 != 0 || $1 % 400 == 0))) {
return false;
}else{
return true;
}
}
}
}
通用
sub isvaliddate {
my $input = shift;
if ($input =~ m!^((?:19|20)dd)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$!) {
# At this point, $1 holds the year, $2 the month and $3 the day of the date entered
if ($3 == 31 and ($2 == 4 or $2 == 6 or $2 == 9 or $2 == 11)) {
return 0; # 31st of a month with 30 days
} elsif ($3 >= 30 and $2 == 2) {
return 0; # February 30th or 31st
} elsif ($2 == 2 and $3 == 29 and not ($1 % 4 == 0 and ($1 % 100 ! = 0 or $1 % 400 == 0))) {
return 0; # February 29th outside a leap year
} else {
return 1; # Valid date
}
} else {
return 0; # Not a date
}
}