如何判断一个输入框 是输入的 日期 与时间 的合法性呀,如2003-1-9 15:09 参考:http://expert.csdn.net/Expert/TopicView1.asp?id=1779160 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.使用正则表达式 /// <summary> /// 校验具有value属性的控件的value年月日字符串是否合法(Date:YYYY-MM-DD),不合法就给出提示信息并使其获得焦点。 /// </summary> /// <param name="date">待较验的年月日字符串</param> /// <returns>True,合法;False:不合法,并返回错误信息:message</returns> /// 使用方法:ID指控件的ID标识;onBlur:失去焦点 /// onBlur="javascript:IsValidDate(ID);" function IsValidDate(ID) { var sDate=ID.value.replace(/(^\s+|\s+$)/g,""); //去两边空格; if(sDate=="") return true; //如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为"" //数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式 var s = sDate.replace(/[\d]{4,4}[\-/]{1}[\d]{1,2}[\-/]{1}[\d]{1,2}/g,""); if (s=="") //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D { var t=new Date(sDate.replace(/\-/g,"/")); var ar = sDate.split(/[-/ :]/); var k = false; if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate()) k = true; if(k) { alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。"); ID.focus(); return false; } } else { alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。"); ID.focus(); return false; } return true; } 2.取出不同部分进行校验 /// 使用方法:ID指控件的ID标识;onBlur:失去焦点 /// onBlur="javascript:IsValidDate(ID);" function IsValidDate(ID) { var iYear, iMonth, iDay ; var sYear = null, sMonth = null, sDay = null; var iLen; var result; var message; //错误提示信息 message = null; date = ID.value.replace(/(^\s+|\s+$)/g,""); //去空格 //可以不输入 if ((date == null)||(date =="")) { result = true; return result; } iLen = date.length; if ((iLen < 8)||(iLen > 10)) { message = "日期格式错误[YYYY-MM-DD],最短为8位(如:2003-1-1),最长为10位(如:2003-10-10)"; result = false; window.alert(message); ID.focus(); return result; } else { try { //取年。注意:字符串从0开始。 sYear = date.substring(0,4); //校验年是否有效正整数 if (!IsDatePlusInteger(sYear)) { message = "[年]中有非法字符,请输入数字。格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; //[年-月-日]中年有非法字符:输入的不是数字[0..9] } //校验年的范围 iYear = parseInt(sYear); if ((iYear < 1900) || (iYear > 3000) ) { message ="[年份]不切实际,请输入范围在1900-3000之间的年份。格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; } //校验年和月之间的- if (date.substring( 4,5) != "-") { message = "年和月之间要用\"-\"连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } // //根据日期的长度,取月 // if (iLen==8) //月,日都为1位[YYYY-M-D] sMonth = date.substring(5,6); if (iLen==9) //月,日中有一项为1位[YYYY-MM-D]或[YYYY-M-DD] { if(date.substring(7,8)=="-") //[YYYY-MM-D] { sMonth = date.substring(5,7); } else if(date.substring(6,7)=="-") //[YYYY-M-DD] { sMonth = date.substring(5,6); } else { message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } } if (iLen==10) //月,日都为2位[YYYY-MM-DD] sMonth = date.substring(5,7); // //校验月是否有效正整数 // if (!IsDatePlusInteger(sMonth)) { message ="[月]中有非法字符,请输入数字!格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; //[年-月-日]中有非法字符:输入的不是数字[0..9] } // //校验月的范围 // iMonth = parseInt(sMonth); if ((iMonth < 1) || (iMonth > 12)) { message = "[月份]错误,只能从1月到12月!格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; } // //根据日期的长度,取日,并校验月和日之间的- // if (iLen==8) //月,日都为1位[YYYY-M-D] { sDay = date.substring(7,8); if (date.substring(6,7) !="-") { message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } } if (iLen==9) //月,日中有一项为1位[YYYY-MM-D]或[YYYY-M-DD] { if(date.substring(7,8)=="-") //[YYYY-MM-D] { sDay = date.substring(8,9); if (date.substring(7,8) !="-") { message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } } if(date.substring(6,7)=="-") //[YYYY-M-DD] { sDay = date.substring(7,9); if (date.substring(6,7) !="-") { message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } } } if (iLen==10) //月,日都为2位[YYYY-MM-DD] { sDay = date.substring(8,10); if (date.substring(7,8) !="-") { message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false; window.alert(message); ID.focus(); return result; } } // //校验日是否有效正整数 // if (!IsDatePlusInteger(sDay)) { message = "[日]中有非法字符,请输入数字!格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; //[年-月-日]中有非法字符:输入的不是数字[0..9] } iDay = parseInt(sDay); // //校验天 // if (!isValidDay(iYear, iMonth, iDay)) { result = false; message = "天不正确。"; //window.alert(message); ID.focus(); return result; } result = true; return result; } catch(e) { //提示信息 message = "[年-月-日]中有非法字符。格式为:YYYY-MM-DD。"; result = false; window.alert(message); ID.focus(); return result; } } } 续 /// <summary> /// 校验一个日期字符串是否是正整数:[0..9]:可用于序号检验 /// 不合法就给出提示信息 /// 它与普通字符串的区别在于:日期字符串的月,日第一位可以为0, /// 正整数字符串的第一位不能是 0 /// </summary> /// <param name="sInt">待较验的字符串</param> /// <returns>True,合法;False:不合法</returns> /// 使用方法:ID指控件的ID标识 /// if(!IsDatePlusInteger(document.all.ID.value)) {document.all.ID.focus();//获得焦点} function IsDatePlusInteger(sInt) { var i,j; var strx; var result; var errorMessage; //错误提示信息 result = true; errorMessage = null; strx = sInt.replace(/(^\s+|\s+$)/g,""); // //可以不输入 // if((strx == "")||(strx == null)) { result = true; } // //检查每个字符是否"数字":[0..9] // for( i = 0 ;i<strx.length;i++) if ("0123456789".indexOf(strx.substring(i,i+1),0) == -1) { errorMessage = "数字有非法字符,请输入正整数[0-9]"; //window.alert(errorMessage); result = false; break; } return result; } /// <summary> /// 校验某年是否闰年,在此之前,首先要校验年是正确的。 /// </summary> /// <param name="iYear">待较验的年</param> /// <returns>True,合法;False:不合法</returns> function IsLeapYear(iYear) { //满足下面条件之一:能够被4整除但不能被100整除或者能被400整除。 return (iYear % 100)?(iYear % 4==0):(iYear % 400==0) } /// <summary> /// 校验日期(年-月-日)的天数是否正确(Date:YYYY-MM-DD),在此之前, /// 首先要校验年月是正确的。 /// </summary> /// <param name="iYear">待较验日期的年</param> /// <param name="iMonth">待较验日期的月</param> /// <param name="iDay">待较验日期的日</param> /// <returns>True,合法;False:不合法</returns> function isValidDay(iYear,iMonth,iDay) { var iMaxDay; var result; var message; //错误提示信息 result = true; message = null; try { switch (iMonth) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: iMaxDay = 31; //月大 if ((iDay < 0) || (iDay > iMaxDay)) { message = "[天]错误," + iMonth + "月的天的范围是[1-31]!"; result = false; } break; case 4: case 6: case 9: case 11: iMaxDay = 30; //月小 if ((iDay < 0) || (iDay > iMaxDay)) { message = "[天]错误," + iMonth + "月的天的范围是[1-30]!"; result = false; } break; case 2: if (IsLeapYear(iYear)) { iMaxDay = 29; //闰年 if ((iDay < 0) || (iDay > iMaxDay)) { message = "闰年。[天]错误," + iYear + "年" + iMonth + "月的天的范围是[1-29]!"; result = false; } } else { iMaxDay = 28; //平年 if ((iDay < 0) || (iDay > iMaxDay)) { message = "平年。[天]错误," + iYear + "年" + iMonth + "月的天的范围是[1-28]!"; result = false; } } break; default: message = "日期输入不正确"; result = false; break; } } catch(e) { //提示信息 message = e; result = false; } if(!result) window.alert(message); return result; } jquery $.get()问题.... return 问题 【求助】问一个JS先转向再执行的问题 js的问题 jquery如何load gb2312的页面~~~ 急急急 一道简单的题 如何获得<textarea>中光标的位置 当把鼠标放在链接上时,自动出现此连接的一个详细说明,如何实现,在线等待,高分? 怎么利用子窗口选择头像?(48分) 这段代码如何理解 用javascript判断日期的正确的原代码! 在线等!!! 如何将子窗口的数组参数传递回父窗口?
/// <summary>
/// 校验具有value属性的控件的value年月日字符串是否合法(Date:YYYY-MM-DD),不合法就给出提示信息并使其获得焦点。
/// </summary>
/// <param name="date">待较验的年月日字符串</param>
/// <returns>True,合法;False:不合法,并返回错误信息:message</returns>
/// 使用方法:ID指控件的ID标识;onBlur:失去焦点
/// onBlur="javascript:IsValidDate(ID);"
function IsValidDate(ID)
{
var sDate=ID.value.replace(/(^\s+|\s+$)/g,""); //去两边空格;
if(sDate=="")
return true;
//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为""
//数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式
var s = sDate.replace(/[\d]{4,4}[\-/]{1}[\d]{1,2}[\-/]{1}[\d]{1,2}/g,"");
if (s=="") //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D
{
var t=new Date(sDate.replace(/\-/g,"/"));
var ar = sDate.split(/[-/ :]/);
var k = false;
if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())
k = true;
if(k)
{
alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。");
ID.focus();
return false;
}
}
else
{
alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。");
ID.focus();
return false;
}
return true;
}
/// 使用方法:ID指控件的ID标识;onBlur:失去焦点
/// onBlur="javascript:IsValidDate(ID);"
function IsValidDate(ID)
{
var iYear, iMonth, iDay ;
var sYear = null, sMonth = null, sDay = null;
var iLen;
var result;
var message; //错误提示信息 message = null;
date = ID.value.replace(/(^\s+|\s+$)/g,""); //去空格
//可以不输入
if ((date == null)||(date ==""))
{
result = true;
return result;
} iLen = date.length;
if ((iLen < 8)||(iLen > 10))
{
message = "日期格式错误[YYYY-MM-DD],最短为8位(如:2003-1-1),最长为10位(如:2003-10-10)";
result = false;
window.alert(message);
ID.focus();
return result;
}
else
{
try
{
//取年。注意:字符串从0开始。 sYear = date.substring(0,4);
//校验年是否有效正整数
if (!IsDatePlusInteger(sYear))
{
message = "[年]中有非法字符,请输入数字。格式为:YYYY-MM-DD。";
result = false;
window.alert(message);
ID.focus();
return result; //[年-月-日]中年有非法字符:输入的不是数字[0..9]
}
//校验年的范围
iYear = parseInt(sYear);
if ((iYear < 1900) || (iYear > 3000) )
{
message ="[年份]不切实际,请输入范围在1900-3000之间的年份。格式为:YYYY-MM-DD。"; result = false;
window.alert(message);
ID.focus();
return result;
}
//校验年和月之间的-
if (date.substring( 4,5) != "-")
{
message = "年和月之间要用\"-\"连接,格式为:YYYY-MM-DD"; result = false;
window.alert(message);
ID.focus();
return result;
}
//
//根据日期的长度,取月
//
if (iLen==8) //月,日都为1位[YYYY-M-D]
sMonth = date.substring(5,6);
if (iLen==9) //月,日中有一项为1位[YYYY-MM-D]或[YYYY-M-DD]
{
if(date.substring(7,8)=="-") //[YYYY-MM-D]
{
sMonth = date.substring(5,7);
}
else if(date.substring(6,7)=="-") //[YYYY-M-DD]
{
sMonth = date.substring(5,6);
}
else
{
message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD";
result = false;
window.alert(message);
ID.focus();
return result;
}
}
if (iLen==10) //月,日都为2位[YYYY-MM-DD]
sMonth = date.substring(5,7);
//
//校验月是否有效正整数
//
if (!IsDatePlusInteger(sMonth))
{
message ="[月]中有非法字符,请输入数字!格式为:YYYY-MM-DD。"; result = false;
window.alert(message);
ID.focus();
return result; //[年-月-日]中有非法字符:输入的不是数字[0..9]
}
//
//校验月的范围
//
iMonth = parseInt(sMonth);
if ((iMonth < 1) || (iMonth > 12))
{
message = "[月份]错误,只能从1月到12月!格式为:YYYY-MM-DD。"; result = false;
window.alert(message);
ID.focus();
return result;
}
//
//根据日期的长度,取日,并校验月和日之间的-
//
if (iLen==8) //月,日都为1位[YYYY-M-D]
{
sDay = date.substring(7,8);
if (date.substring(6,7) !="-")
{
message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false;
window.alert(message);
ID.focus();
return result;
}
}
if (iLen==9) //月,日中有一项为1位[YYYY-MM-D]或[YYYY-M-DD]
{
if(date.substring(7,8)=="-") //[YYYY-MM-D]
{
sDay = date.substring(8,9);
if (date.substring(7,8) !="-")
{
message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false;
window.alert(message);
ID.focus();
return result;
}
}
if(date.substring(6,7)=="-") //[YYYY-M-DD]
{
sDay = date.substring(7,9);
if (date.substring(6,7) !="-")
{
message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false;
window.alert(message);
ID.focus();
return result;
}
}
}
if (iLen==10) //月,日都为2位[YYYY-MM-DD]
{
sDay = date.substring(8,10);
if (date.substring(7,8) !="-")
{
message = "月和日之间要用''-''连接,格式为:YYYY-MM-DD"; result = false;
window.alert(message);
ID.focus();
return result;
}
}
//
//校验日是否有效正整数
//
if (!IsDatePlusInteger(sDay))
{
message = "[日]中有非法字符,请输入数字!格式为:YYYY-MM-DD。";
result = false;
window.alert(message);
ID.focus();
return result; //[年-月-日]中有非法字符:输入的不是数字[0..9]
}
iDay = parseInt(sDay);
//
//校验天
//
if (!isValidDay(iYear, iMonth, iDay))
{
result = false;
message = "天不正确。";
//window.alert(message);
ID.focus();
return result;
}
result = true; return result;
}
catch(e)
{
//提示信息
message = "[年-月-日]中有非法字符。格式为:YYYY-MM-DD。";
result = false;
window.alert(message);
ID.focus();
return result;
}
}
}
/// <summary>
/// 校验一个日期字符串是否是正整数:[0..9]:可用于序号检验
/// 不合法就给出提示信息
/// 它与普通字符串的区别在于:日期字符串的月,日第一位可以为0,
/// 正整数字符串的第一位不能是 0
/// </summary>
/// <param name="sInt">待较验的字符串</param>
/// <returns>True,合法;False:不合法</returns>
/// 使用方法:ID指控件的ID标识
/// if(!IsDatePlusInteger(document.all.ID.value)) {document.all.ID.focus();//获得焦点}
function IsDatePlusInteger(sInt)
{
var i,j;
var strx;
var result;
var errorMessage; //错误提示信息 result = true;
errorMessage = null;
strx = sInt.replace(/(^\s+|\s+$)/g,"");
//
//可以不输入
//
if((strx == "")||(strx == null))
{
result = true;
}
//
//检查每个字符是否"数字":[0..9]
//
for( i = 0 ;i<strx.length;i++)
if ("0123456789".indexOf(strx.substring(i,i+1),0) == -1)
{
errorMessage = "数字有非法字符,请输入正整数[0-9]";
//window.alert(errorMessage);
result = false;
break;
}
return result;
} /// <summary>
/// 校验某年是否闰年,在此之前,首先要校验年是正确的。
/// </summary>
/// <param name="iYear">待较验的年</param>
/// <returns>True,合法;False:不合法</returns>
function IsLeapYear(iYear)
{
//满足下面条件之一:能够被4整除但不能被100整除或者能被400整除。
return (iYear % 100)?(iYear % 4==0):(iYear % 400==0)
}
/// <summary>
/// 校验日期(年-月-日)的天数是否正确(Date:YYYY-MM-DD),在此之前,
/// 首先要校验年月是正确的。
/// </summary>
/// <param name="iYear">待较验日期的年</param>
/// <param name="iMonth">待较验日期的月</param>
/// <param name="iDay">待较验日期的日</param>
/// <returns>True,合法;False:不合法</returns>
function isValidDay(iYear,iMonth,iDay)
{
var iMaxDay;
var result;
var message; //错误提示信息
result = true;
message = null;
try
{
switch (iMonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
iMaxDay = 31; //月大
if ((iDay < 0) || (iDay > iMaxDay))
{
message = "[天]错误," + iMonth + "月的天的范围是[1-31]!";
result = false;
}
break;
case 4:
case 6:
case 9:
case 11:
iMaxDay = 30; //月小
if ((iDay < 0) || (iDay > iMaxDay))
{
message = "[天]错误," + iMonth + "月的天的范围是[1-30]!";
result = false;
}
break;
case 2:
if (IsLeapYear(iYear))
{
iMaxDay = 29; //闰年
if ((iDay < 0) || (iDay > iMaxDay))
{
message = "闰年。[天]错误," + iYear + "年" + iMonth + "月的天的范围是[1-29]!";
result = false;
}
}
else
{
iMaxDay = 28; //平年
if ((iDay < 0) || (iDay > iMaxDay))
{
message = "平年。[天]错误," + iYear + "年" + iMonth + "月的天的范围是[1-28]!";
result = false;
}
}
break;
default:
message = "日期输入不正确";
result = false;
break;
}
}
catch(e)
{
//提示信息
message = e;
result = false;
}
if(!result)
window.alert(message);
return result;
}