求javaScript代码验证输入的年月日是否合法
求javaScript代码验证输入的年月日是否合法 问题点数:20、回复次数:23Top
1 楼jianghua008(啥也不会)回复于 2003-09-04 16:06:35 得分 3
function checkDate(strValue){
var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
if(strValue=="") return true;
else if(!objRegExp.test(strValue))
return false;
else{
var arrayDate = strValue.split(RegExp.$1);
var intDay = parseInt(arrayDate[2],10);
var intYear = parseInt(arrayDate[0],10);
var intMonth = parseInt(arrayDate[1],10);
if(intYear<1900)
{
return false;
}
if(intMonth > 12 || intMonth < 1) {
return false;
}
var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31,'1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31,'8' : 31,'9' : 30}
if(arrayLookup[arrayDate[1]] != null) {
if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)
return true;
}
var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));
if( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0)
return true;
}
return false;
}Top
2 楼luckybeggar(木子)回复于 2003-09-04 16:13:34 得分 3
function isdate(strDate){
if(strDate.length!=10)
return false;
var strSeparator = "."; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
var intday;
var boolLeapYear;
strDateArray = strDate.split(strSeparator);
if(strDateArray.length!=3) return false;
intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
intday = parseInt(strDateArray[2],10);
if(isNaN(intYear)||isNaN(intMonth)||isNaN(intday)) return false;
if(intMonth>12||intMonth<1) return false;
if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intday>31||intday<1)) return false;
if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intday>30||intday<1)) return false;
if(intMonth==2){
if(intday<1) return false;
boolLeapYear = false;
if((intYear%100)==0){
if((intYear%400)==0) boolLeapYear = true;
}
else{
if((intYear%4)==0) boolLeapYear = true;
}
if(boolLeapYear){
if(intday>29) return false;
}
else{
if(intday>28) return false;
}
}
return true;
}Top
3 楼lymkelly(柳叶眉)回复于 2003-09-04 16:49:51 得分 0
谢谢: jianghua008(啥也不会)
谢谢: luckybeggar()
非常好 感谢Top
4 楼lymkelly(柳叶眉)回复于 2003-09-04 22:33:28 得分 0
to :jianghua008(啥也不会)
能给我解释一下这个吗
var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
控制的输入的符号,在这里有哪几个呢
谢谢
Top
5 楼Debian(乌鱼子)回复于 2003-09-04 22:41:22 得分 2
>> var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
这些都是被程序认为非法的字符Top
6 楼squallzeng(小呆呆)回复于 2003-09-05 08:50:55 得分 2
function isValidDate(day, month, year) {
if (month < 1 || month > 12) {
return false;
}
if (day < 1 || day > 31) {
return false;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) &&
(day == 31)) {
return false;
}
if (month == 2) {
var leap = (year % 4 == 0 &&
(year % 100 != 0 || year % 400 == 0));
if (day>29 || (day == 29 && !leap)) {
return false;
}
}
return true;
}
这个函数对你有用的,并且比较简单。看看吧*-*Top
7 楼lymkelly(柳叶眉)回复于 2003-09-05 09:10:44 得分 0
谢谢 Debian(乌鱼子) 可是我在第一个程序里代码里没有发现 分割符是什么阿
谢谢squallzeng(小呆呆) ,我的是一个文本框的输入,不是分开的三个,谢谢Top
8 楼jianghua008(啥也不会)回复于 2003-09-05 09:36:39 得分 0
var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
正则表达式
checkDate("2003-09-05")Top
9 楼fast_time(fast_time)回复于 2003-09-05 09:39:05 得分 2
function gfnIsDate(strDate) {
var strYear;
var strMonth;
var strDate1;
var strLastDate;
var datDate;
//字符串長度の判定
if (10 != strDate.length) {
return false;
}
//年の取得
strYear = strDate.substring(0, 4);
//数字の判定
if (!gfnIsNumeric(strYear)) {
return false;
}
//月の取得
strMonth = strDate.substring(5, 7);
//数字の判定
if (!gfnIsNumeric(strMonth)) {
return false;
}
if (strMonth > "12") {
return false;
}
//日の取得
strDate1 = strDate.substring(8, 10);
//数字の判定
if (!gfnIsNumeric(strDate1)) {
return false;
}
//本月の終了日の取得
datDate = new Date();
datDate.setFullYear(strYear, strMonth, 0);
strLastDate = datDate.getDate();
if (strDate1 > strLastDate) {
return false;
} else {
return true;
}
}
Top
10 楼lymkelly(柳叶眉)回复于 2003-09-05 11:21:30 得分 0
to:
luckybeggar()
好像没有去除字母的验证Top
11 楼lymkelly(柳叶眉)回复于 2003-09-05 11:24:45 得分 0
如果想实现 年月 的,不要日期
怎么实现
我的脑子现在很糊涂,不知道怎么改了
为什么这一句
if(isNaN(intYear)||isNaN(intMonth)||isNaN(intday)) return false;
没有吧1998.10.2a
拦截呢?????????????
555555555555555555555555
Top
12 楼lymkelly(柳叶眉)回复于 2003-09-05 14:51:03 得分 0
有没有验证年月的完整的js
完整的
验证 年月 即可
1上面的
luckybeggar 的没有去除字母 我也不知道为什么
2。我想把着两个程序改成只验证年和月的
我看不懂 没法改
Top
13 楼xjx802(Crazy Bird)回复于 2003-09-05 14:56:34 得分 3
/**************************************日期有效性判断*******************************************
Author xujx
Date 2003-08-01
判断主函数:dateJuge(DateString) 参数:DateString 为日期值串
辅助函数:monthJuge(year,month,day) 用于判断输入的日期是否超过当月天数
**********************************************************************************************
*/
function dateJuge(DateString){
if(DateString.length!=10){
alert("请按照 'YYYY-MM-DD' 的格式输入 \n例: '2003-01-01' " );
//DateString.focus();
return false;
}
if(DateString.indexOf("-")==-1){
alert("年、月、日之间请用 '-' 隔开 \n例: '2003-01-01'");
//DateString.focus();
return false;
}
if(DateString.length==10){
var month1=String(DateString).substring(5,7);
var day1=Number(String(DateString).substring(8,10));
var year1=Number(String(DateString).substring(0,4));
//判断输入的年份是否为闰年 是:0 否:1
if(year1%4==0){
if(year1%100==0){
if(year1%400==0){
year1=0;
}else{
year1=1;
}
}else{
year1=0;
}
}else{
year1=1;
}
if(!monthJuge(year1,month1,day1)){
//DateString.focus();
return false;
}
}
}
function monthJuge(year,month,day){
if(month>12)
{alert("输入的月份不能大于12")
return false;}
if(month==4||month==6||month==9||month==11){
if(day>30){
alert("日期输入错误");
return false;}
else
return true;
}
else if(month==2)
{
if(year==0&&day>29){
alert("日期输入错误");
return false;}
else if(year==1&&day>28){
alert("日期输入错误");
return false;}
else
return true;
}
else{
if(day>31){
alert("日期输入错误");
return false;}
else
return true;
}
}Top
14 楼lymkelly(柳叶眉)回复于 2003-09-05 15:02:28 得分 0
现在修改好的
function isdate(strDate){
if(strDate.length!=10)
return false;
var strSeparator = "."; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
var intday;
var boolLeapYear;
strDateArray = strDate.split(strSeparator);
if(strDateArray.length!=3) return false;
if(isNaN(strDateArray[0])) return false;
if(isNaN(strDateArray[1]) )return false;
if(isNaN(strDateArray[2])) return false;
intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
intday = parseInt(strDateArray[2],10);
if(intMonth>12||intMonth<1) return false;
if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intday>31||intday<1)) return false;
if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intday>30||intday<1)) return false;
if(intMonth==2){
if(intday<1) return false;
boolLeapYear = false;
if((intYear%100)==0){
if((intYear%400)==0) boolLeapYear = true;
}
else{
if((intYear%4)==0) boolLeapYear = true;
}
if(boolLeapYear){
if(intday>29) return false;
}
else{
if(intday>28) return false;
}
}
return true;
}
Top
15 楼lymkelly(柳叶眉)回复于 2003-09-05 15:10:30 得分 0
谢谢:xjx802(Crazy Bird)
你的就很清晰了,没有我不认识的代码了!!
非常感谢
感谢大家!!!
我把验证 年和月的 贴出来
function isdate(strDate){
if(strDate.length!=7)
return false;
var strSeparator = "."; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
strDateArray = strDate.split(strSeparator);
if(strDateArray.length!=2) return false;
if(isNaN(strDateArray[0])) return false;
if(isNaN(strDateArray[1]) )return false;
intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
if(intMonth>12||intMonth<1) return false;
return true;
}Top
16 楼piggybank(吞硬币的小猪)回复于 2003-09-05 15:42:02 得分 5
各位,用在 Web 中何必那么麻烦呢?
何况,你们的函数验证了 1999-2-29 ?或者 2003-8-32 ?
看下面的例子:
—————————————————————————————————
<script language="VBScript">
Function isValidDate(strDate)
isValidDate = IsDate(strDate)
End Function
</script>
<script language="JavaScript">
var strDate = prompt("Give me a date:","");
if ( strDate != null && strDate != "" )
{
if (isValidDate(strDate))
alert( "'" + strDate + "' is a valid date.");
else
alert( "'" + strDate + "' is not a valid date.");
}
</script>
—————————————————————————————————
打开记事本,粘贴进去,另存为一个 test.html,运行看看效果?Top
17 楼piggybank(吞硬币的小猪)回复于 2003-09-05 15:46:10 得分 0
感觉第一位朋友的比较不错:正则表达式避开了分隔符的问题,然后判断了月份和瑞年问题。
第二位朋友相对第一位稍微差一点儿,用上正则表达式比较方便。
其它的都太简单了——仅仅判断 format 不行啊!
fast_time(fast_time) 的思路比较巧妙 :) 逆向思维,hoho,配合正则表达式来分割一下就更好了 :)
Top
18 楼lymkelly(柳叶眉)回复于 2003-09-05 21:28:51 得分 0
to:piggybank(吞硬币的小猪)
不过我用起来不方便阿
然后我加了个文本匡
然后就不知道怎么用了*^_&*Top
19 楼piggybank(吞硬币的小猪)回复于 2003-09-06 18:17:17 得分 0
晕倒啊,我只不过多写了一个例子而已,哈哈
我的函数定义如下
<script language="VBScript">
Function isValidDate(strDate)
isValidDate = IsDate(strDate)
End Function
</script>
这段代码放到你的 html 的中,或者存为一个 js 文件给html引用(asp/jsp/aspx都行啦),在你的 javaScript 需要验证输入日期是否合法的地方调用,好比
isValidDate("2003.9.6") 就行啦。
另外几位朋友给你写的函数调用起来也一样的,只是注意调用这些函数的时候最好把这些函数的代码放到你调用的代码之前(否则找不到咯)。
Top
20 楼piggybank(吞硬币的小猪)回复于 2003-09-06 18:19:33 得分 0
这里重新给你一个例子来调用上面几位朋友的函数做一个对比:
——————————————————————————————
<html>
<head>
<title>Date Validate Function Test</title>
</head>
<script language="VBScript">
'piggybank 的例子
Function isValidDate(strDate)
strDate = Replace(strDate,".","-")
'strDate = Replace(strDate,",","-")
isValidDate = IsDate(strDate)
End Function
</script>
<script language="JavaScript">
function checkDate(strValue)
{
var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
if(strValue=="")
return true;
else if(!objRegExp.test(strValue))
return false;
else
{
var arrayDate = strValue.split(RegExp.$1);
var intDay = parseInt(arrayDate[2],10);
var intYear = parseInt(arrayDate[0],10);
var intMonth = parseInt(arrayDate[1],10);
if(intYear<1900)
{
return false;
}
if(intMonth > 12 || intMonth < 1)
{
return false;
}
var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31,'1' : 31,'3' : 31, '4' : 30,'5' : 31,'6' : 30,'7' : 31,'8' : 31,'9' : 30}
if(arrayLookup[arrayDate[1]] != null)
{
if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)
return true;
}
var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));
if ( ((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <=28)) && intDay !=0 )
return true;
}
return false;
}
//luckybeggar() 的函数
function isdate(strDate)
{
if(strDate.length!=10)
return false;
var strSeparator = "."; //日期分隔符
var strSeparator = "-"; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
var intday;
var boolLeapYear;
strDateArray = strDate.split(strSeparator);
if (strDateArray.length != 3)
return false;
intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
intday = parseInt(strDateArray[2],10);
if(isNaN(intYear)||isNaN(intMonth)||isNaN(intday)) return false;
if(intMonth>12||intMonth<1) return false;
if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intday>31||intday<1)) return false;
if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intday>30||intday<1)) return false;
if(intMonth==2)
{
if(intday<1) return false;
boolLeapYear = false;
if((intYear%100)==0)
{
if((intYear%400)==0) boolLeapYear = true;
}
else
{
if((intYear%4)==0) boolLeapYear = true;
}
if(boolLeapYear)
{
if(intday>29) return false;
}
else
{
if (intday>28) return false;
}
}
return true;
}
</script>
<script language="JavaScript">
//这只是一个调用上面的函数的例子
//注意上面函数代码和这段调用代码的位置顺序:先定义函数,然后才能调用
function onValidateDate() //“验证”按钮的 onclick 将调用这个函数
{
var strDate = document.all["txtDate"].value; //从输入框中获得要验证的字符串
if ( strDate == null )
{
document.all["lblResult1"].innerHTML = "<font color=\"red\">'请输入一个日期。</font>";
return false; //什么也没有输入当然不必验证
}
if ( checkDate(strDate) ) //调用 jianghua008(啥也不会) 的函数的例子
{ //借用 DHTML 的小花样输出结果
document.all["lblResult1"].innerHTML = "<font color=\"green\">jianghua008: '" + strDate + "',这是一个有效的日期。</font>";
}
else
{
document.all["lblResult1"].innerHTML = "<font color=\"red\">jianghua008: '" + strDate + "',这是一个无效的日期。</font>";
}
if ( isdate(strDate) ) //调用 luckybeggar() 的函数的例子
{ //借用 DHTML 的小花样输出结果
document.all["lblResult2"].innerHTML = "<font color=\"green\">luckybeggar: '" + strDate + "',这是一个有效的日期。</font>";
}
else
{
document.all["lblResult2"].innerHTML = "<font color=\"red\">luckybeggar: '" + strDate + "',这是一个无效的日期。</font>";
}
if ( isValidDate(strDate) ) //调用 piggybank 的函数的例子
{ //借用 DHTML 的小花样输出结果
document.all["lblResult3"].innerHTML = "<font color=\"green\"><u>^oo^</u>: '" + strDate + "',这是一个有效的日期。</font>";
}
else
{
document.all["lblResult3"].innerHTML = "<font color=\"red\"><u>^oo^</u>: '" + strDate + "',这是一个无效的日期。</font>";
}
}
</script>
<body>
<center>
请输入一个日期:
<input id="txtDate" value="2003-09-06">
<br>
<span id="lblResult1"></span>
<br>
<span id="lblResult2"></span>
<br>
<span id="lblResult3"></span>
<br>
<input type="button" onclick="javascript:onValidateDate();" value="验证">
</center>
</body>
</html>
——————————————————————————————
分别测试一下:
2003-09-06
2003-9-6
2003-2-29
2004-2-29
Top
21 楼piggybank(吞硬币的小猪)回复于 2003-09-06 18:20:29 得分 0
补充一下,应该测试:
2003-09-06
2003-9-6
2003-2-29
2004-2-29
2003-02-29
2004-02-29Top
22 楼lymkelly(柳叶眉)回复于 2003-09-18 16:44:19 得分 0
to : piggybank(吞硬币的小猪)
真是太经典了
谢谢!!!!!!!!!!!!!Top
23 楼lymkelly(柳叶眉)回复于 2003-09-18 16:53:08 得分 0
to : piggybank(吞硬币的小猪)
佩服之情如滔滔江水!!!!
简直了
Top




