扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Jerry 来源:CSDN 2008年3月17日
关键字: 正则表达式 JavaScript java
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="datetimevalidate.aspx.cs"
Inherits="datetimevalidate" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" language="javascript">
function fnOnclick()
{
var strDate = document.all.cnlDate.value;
if(!fnCheckDate(strDate))
{
alert("日期不合法");
}
else
{
alert("日期合法");
}
}
function fnCheckDate(strDate)
{
var strCheckDate = strDate+""; //进一步确认哪来判断的肯定是一串字符串
if(strCheckDate == "") //空字符串,不是合法的日期字符串,返回false
{
return false;
}
debugger;
//判断传进来的数据是那种格式写成日期
var intIndex = -1; //利用正则表达式,查找字符串中是否包含某个字符,没找到为-1,否则为 (0 - String.length - 1)
var arrDate; //分别存储年月日
var regExpInfo = /\./; //正则表达式,匹配第一个出现 "."的位置
//在这里,我之所以不使用replace函数把所有的"."和"/"换成"-",然后分别存储年月日,是因为用户有可能输入 2001/3-2,就判断不出它是不合法日期了
intIndex = strCheckDate.search(regExpInfo); //查找是否含有 "."
if(intIndex == - 1) //不包含
{
regExpInfo = /-/;
intIndex = strCheckDate.search(regExpInfo);
if(intIndex == -1)
{
regExpInfo = /\//; //查找是否含有 "/"
intIndex = strCheckDate.search(regExpInfo);
if(intIndex == -1)
{
arrDate = new Array(); //只包含年或格式为20010307
if(strCheckDate.length==4)
{
arrDate[0]=strCheckDate;
window.alert(arrDate[0]);
}
else if(strCheckDate.length==6)
{
arrDate[0]=strCheckDate.substring(0,4);
arrDate[1]=strCheckDate.substring(4,6);
}
else if(strCheckDate.length==8)
{
arrDate[0]=strCheckDate.substring(0,4);
arrDate[1]=strCheckDate.substring(4,6);
arrDate[2]=strCheckDate.substring(6,8);
}
else
{
return false;
}
}
else
{
arrDate = strCheckDate.split("/"); //2001/3/7 型
}
}
else
{
arrDate = strCheckDate.split("-"); //2001-3-7 型
}
}
else
{
arrDate = strCheckDate.split("."); //2001.3.7 型
}
if(arrDate.length > 3) //如果分离出来的项超过3,除了年月日还有其它的,不合法日期,返回false
{
return false;
}
else if(arrDate.length > 0)
{
//判断年是否合法
if(fnIsIntNum(arrDate[0])) //是正整数
{
if(parseInt(arrDate[0]) < 1 || parseInt(arrDate[0]) > 9999) //年范围为1 - 9999
{
return false;
}
}
else
{
return false; //年不是正整数,错误
}
//判断月是否合法
if(arrDate.length > 1)
{
if(fnIsIntNum(arrDate[1])) //是正整数
{
if(parseInt(arrDate[1]) < 1 || parseInt(arrDate[1]) > 12)
{
return false;
}
}
else
{
return false;
}
}
//判断日是否合法
if(arrDate.length > 2)
{
if(fnIsIntNum(arrDate[2])) //是正整数
{
var intDayCount = fnComputerDay(parseInt(arrDate[0]),parseInt(arrDate[1]));
if(intDayCount < parseInt(arrDate[2]))
{
return false;
}
}
else
{
return false;
}
}
}
return true;
}
//**********************************************************************************************************
//判断一个数是否为正整数
//参数:strNum ---- 需要判断的字符串
//返回值:true ---- 整数 false ---- 非整数
function fnIsIntNum(strNum)
{
var strCheckNum = strNum + "";
if(strCheckNum.length < 1) //空字符串
return false;
else if(isNaN(strCheckNum)) //不是数值
return false;
else if(parseInt(strCheckNum) < 1) //不是正数
return false;
else if(parseFloat(strCheckNum) > parseInt(strCheckNum)) //不是整数
return false;
return true;
}
//**********************************************************************************************************
//功能:判断intYear年intMonth月的天数
//返回值:intYear年intMonth月的天数
function fnComputerDay(intYear,intMonth)
{
var dtmDate = new Date(intYear,intMonth,-1);
var intDay = dtmDate.getDate() + 1;
return intDay;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input name="cnlButton" id="cnlButton" type="button" value="日期检查" onclick="fnOnclick()">
<asp:TextBox ID="cnlDate" runat="server"></asp:TextBox></div>
</form>
</body>
</html>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者