日期验证问题...(正则表达式加javascript) [ 日期:2004-04-05 ] [ 来自:dotnet中华网 ]
[收藏此页]
程序代码:
1.使用日期选择器,很多朋友做了日期选择器,光我都提供了两个,我觉得这种方法是最好的,因为免去了判断日期的问题.
2.使用.net自带的验证控件,呵呵,是使用正则表达式,我觉得是不完善的,比如2月份不可能存在31,30号.
3.javascript脚本做判断,下面是本人花了一个钟头写的日期验证,是比较完善的验证,可以判断闰年等,里面有两个主要函数,其中checkdate是判断日期,比如 2002-02-09 ,checkdate是判断带时间日期,比如2002-02-09 12:09:09, 做验证的时候,比如确定按钮为Button1,应在Page_Load函数加上Button1.Attributes.Add("onclick","return ('txt_Date');");
js文件代码:
____________________________________________________________________________________
function fob(n, d)
{
var p,i,x;if(!d) d=document;
if((p=n.indexOf("?"))>0&&parent.frames.length)
{
d=parent.frames[n.substring(p+1)].document;
n=n.substring(0,p);
}
if(!(x=d[n])&&d.all)
x=d.all[n];
for (i=0;!x&&i<d.forms.length;i++)
x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++)
x=fob(n,d.layers[i].document);
return x;
}
function checkdate(inpar)
{
var flag=true;
getdate=fob(inpar).value;
if (getdate.search(/^[0-9]{4}-(0[1-9]|[1-9]|1[1-2])-((0[1-9]|[1-9])|1[0-9]|2[0-9]|3[0-1])$/)==-1) // 判断输入格式时候正确
{
flag=false;
}
else
{
var year=getdate.substr(0,getdate.indexOf('-')) // 获得年
// 下面操作获得月份
var transition_month=getdate.substr(0,getdate.lastIndexOf('-'));
var month=transition_month.substr(transition_month.lastIndexOf('-')+1,transition_month.length);
if (month.indexOf('0')==0)
{
month=month.substr(1,month.length);
}
// 下面操作获得日期
var day=getdate.substr(getdate.lastIndexOf('-')+1,getdate.length);
if (day.indexOf('0')==0)
{
day=day.substr(1,day.length);
}
flag=true;
}
if ((month==4 || month==6 || month==9 || month==11) && (day>30)) // 4,6,9,11月份日期不能超过30
{
flag=false;
}
if (month==2) // 判断2月份
{
if (LeapYear(year))
{
if (day>29 || day<1){ flag=false; }
}
else
{
if (day>28 || day<1){flag=false; }
}
}
else
{
flag=true;
}
if (flag==false)
{
alert("您输入的日期不合法!");
return false;
}
}
function checktime(inpar)
{
var flag=true;
getdate=fob(inpar).value;
if (getdate.search(/^[0-9]{4}-(0[1-9]|[1-9]|1[1-2])-((0[1-9]|[1-9])|1[0-9]|2[0-9]|3[0-1]) ((0[1-9]|[1-9])|1[0-9]|2[0-4]):((0[1-9]|[1-9])|[1-5][0-9]):((0[1-9]|[1-9])|[1-5][0-9])$/)==-1) // 判断输入格式时候正确
{
flag=false;
}
else
{
var year=getdate.substr(0,getdate.indexOf('-')) // 获得年
// 下面操作获得月份
var transition_month=getdate.substr(0,getdate.lastIndexOf(' '));
transition_month=getdate.substr(0,getdate.lastIndexOf('-'));
var month=transition_month.substr(transition_month.lastIndexOf('-')+1,transition_month.length);
if (month.indexOf('0')==0)
{
month=month.substr(1,month.length);
}
// 下面操作获得日期
var transition_day=getdate.substr(0,getdate.lastIndexOf(' '));
var day=transition_day.substr(transition_day.lastIndexOf('-')+1,transition_day.length);
if (day.indexOf('0')==0)
{
day=day.substr(1,day.length);
}
flag=true;
}
if ((month==4 || month==6 || month==9 || month==11) && (day>30)) // 4,6,9,11月份日期不能超过30
{
flag=false;
}
if (month==2) // 判断2月份
{
if (LeapYear(year))
{
if (day>29 || day<1){ flag=false; }
}
else
{
if (day>28 || day<1){flag=false; }
}
}
else
{
flag=true;
}
if (flag==false)
{
alert("您输入的日期不合法!");
return false;
}
}
//判断是否闰年
//参数 intYear 代表年份的值
//return true: 是闰年 false: 不是闰年
function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}
2.使用.net自带的验证控件,呵呵,是使用正则表达式,我觉得是不完善的,比如2月份不可能存在31,30号.
3.javascript脚本做判断,下面是本人花了一个钟头写的日期验证,是比较完善的验证,可以判断闰年等,里面有两个主要函数,其中checkdate是判断日期,比如 2002-02-09 ,checkdate是判断带时间日期,比如2002-02-09 12:09:09, 做验证的时候,比如确定按钮为Button1,应在Page_Load函数加上Button1.Attributes.Add("onclick","return ('txt_Date');");
js文件代码:
____________________________________________________________________________________
function fob(n, d)
{
var p,i,x;if(!d) d=document;
if((p=n.indexOf("?"))>0&&parent.frames.length)
{
d=parent.frames[n.substring(p+1)].document;
n=n.substring(0,p);
}
if(!(x=d[n])&&d.all)
x=d.all[n];
for (i=0;!x&&i<d.forms.length;i++)
x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++)
x=fob(n,d.layers[i].document);
return x;
}
function checkdate(inpar)
{
var flag=true;
getdate=fob(inpar).value;
if (getdate.search(/^[0-9]{4}-(0[1-9]|[1-9]|1[1-2])-((0[1-9]|[1-9])|1[0-9]|2[0-9]|3[0-1])$/)==-1) // 判断输入格式时候正确
{
flag=false;
}
else
{
var year=getdate.substr(0,getdate.indexOf('-')) // 获得年
// 下面操作获得月份
var transition_month=getdate.substr(0,getdate.lastIndexOf('-'));
var month=transition_month.substr(transition_month.lastIndexOf('-')+1,transition_month.length);
if (month.indexOf('0')==0)
{
month=month.substr(1,month.length);
}
// 下面操作获得日期
var day=getdate.substr(getdate.lastIndexOf('-')+1,getdate.length);
if (day.indexOf('0')==0)
{
day=day.substr(1,day.length);
}
flag=true;
}
if ((month==4 || month==6 || month==9 || month==11) && (day>30)) // 4,6,9,11月份日期不能超过30
{
flag=false;
}
if (month==2) // 判断2月份
{
if (LeapYear(year))
{
if (day>29 || day<1){ flag=false; }
}
else
{
if (day>28 || day<1){flag=false; }
}
}
else
{
flag=true;
}
if (flag==false)
{
alert("您输入的日期不合法!");
return false;
}
}
function checktime(inpar)
{
var flag=true;
getdate=fob(inpar).value;
if (getdate.search(/^[0-9]{4}-(0[1-9]|[1-9]|1[1-2])-((0[1-9]|[1-9])|1[0-9]|2[0-9]|3[0-1]) ((0[1-9]|[1-9])|1[0-9]|2[0-4]):((0[1-9]|[1-9])|[1-5][0-9]):((0[1-9]|[1-9])|[1-5][0-9])$/)==-1) // 判断输入格式时候正确
{
flag=false;
}
else
{
var year=getdate.substr(0,getdate.indexOf('-')) // 获得年
// 下面操作获得月份
var transition_month=getdate.substr(0,getdate.lastIndexOf(' '));
transition_month=getdate.substr(0,getdate.lastIndexOf('-'));
var month=transition_month.substr(transition_month.lastIndexOf('-')+1,transition_month.length);
if (month.indexOf('0')==0)
{
month=month.substr(1,month.length);
}
// 下面操作获得日期
var transition_day=getdate.substr(0,getdate.lastIndexOf(' '));
var day=transition_day.substr(transition_day.lastIndexOf('-')+1,transition_day.length);
if (day.indexOf('0')==0)
{
day=day.substr(1,day.length);
}
flag=true;
}
if ((month==4 || month==6 || month==9 || month==11) && (day>30)) // 4,6,9,11月份日期不能超过30
{
flag=false;
}
if (month==2) // 判断2月份
{
if (LeapYear(year))
{
if (day>29 || day<1){ flag=false; }
}
else
{
if (day>28 || day<1){flag=false; }
}
}
else
{
flag=true;
}
if (flag==false)
{
alert("您输入的日期不合法!");
return false;
}
}
//判断是否闰年
//参数 intYear 代表年份的值
//return true: 是闰年 false: 不是闰年
function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}