asp 日期格式 正则表达式

fylhpu 2008-12-05 04:00:55
求一正则表达式
标准的日期格式为YYYY-MM-DD或YYYY/MM/DD或YYYYMMDD
当输入的日期不为以上格式时,提示日期格式不对
例如输入YYYY-MMDD或YYYYMM-DD时要报错!!
...全文
986 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fylhpu 2008-12-09

<script language="javascript">
function chkDate(sDate)
{
for (i=0;i<sDate.length;i++)
{
sDate=sDate.replace("/","-");
}
var r=/\d{4}(?:-\d{1,2}){0,2}/
//正则表达式,判断是否为yyyy-mm-dd,yyyy-mm,yyyy格式
if(sDate.match(r)==sDate)
{
var arr=sDate.split("-")
switch(arr.length)
{
//根据不同的yyyy-mm-dd,yyyy-mm格式判断年月日数字是否正确
case 3:
var tmpDate=new Date(arr[0],arr[1],arr[2]);
if(tmpDate.getMonth()==arr[1] && tmpDate.getFullYear()==arr[0]) return true;
break;
case 2:
if(arr[1]<13) return true;
break;
case 1:
if(arr[0].length==4) return true;
break;
default:
return false;
}
}
return false;
}
</script>

高手没看到吗?哪边出问题了,为什么2008-12-01会报不合法?
回复
fylhpu 2008-12-09
没有人帮忙吗?
回复
toury 2008-12-09
呵呵:)

<script>
function ValidDate(s){
var pattern=/^(\d{4})-(\d{1,})-(\d{1,})$/i
var matches=s.match(pattern);
if(matches){ //匹配 yyyy-mm-dd 的形式
var tempDate=new Date(matches[1],matches[2]-1,matches[3]);
if(tempDate.getYear()!=matches[1]||tempDate.getMonth()!=(matches[2]-1)||tempDate.getDate()!=matches[3]){//检查是否正确日期,比如9999-99-99等形式
alert("日期不正确!");
return false;
}
}
else{
alert("格式错误");
return false;
}
return true;
}

</script>
<input type=text name=a id=a onpropertychange='javascript:return ValidDate(this.value)'> IE
<input type=text name=a id=a oninput='javascript:return ValidDate(this.value)'> FF
回复
fylhpu 2008-12-06
[Quote=引用 13 楼 zzxap 的回复:]
function isdate(strr)
{
var str=document.getElementById(strr).value;
if(str.length <7 || str.length>15)
{
alert('請輸入日期');
document.getElementById(strr).focus();
document.getElementById(strr).select();
return false;
}
var pat=/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|((…
[/Quote]
你的正则,我在ASP里执行不了,在DRAEMWEAVE的代码里的颜色是蓝色的而不是绿色的
回复
zzxap 2008-12-06
function isdate(strr)
{
var str=document.getElementById(strr).value;
if(str.length<7 || str.length>15)
{
alert('請輸入日期');
document.getElementById(strr).focus();
document.getElementById(strr).select();
return false;
}
var pat=/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/;
if(pat.test(str))
{
return true;
}
else
{
alert('請輸入正确日期格式');
document.getElementById(strr).focus();
document.getElementById(strr).select();
return false;
}
回复
fylhpu 2008-12-06
[Quote=引用 9 楼 virgo2008 的回复:]
上面的我测试了下,能验证出来!
[/Quote]
上面的月份00会认为合法,而月份12会认为不合法
你可以试下2008-00-01和2008-12-01
回复
fylhpu 2008-12-06
[Quote=引用 8 楼 virgo2008 的回复:]
<script language="javascript">
function chkDate(sDate)
{
var x=sDate.length
for (i=0;i <x;i++)
{
sDate=sDate.replace("/","-");
}
var r=/\d{4}(?:-\d{1,2}){0,2}/
//正则表达式,判断是否为yyyy-mm-dd,yyyy-mm,yyyy格式
if(sDate.match(r)==sDate)
{
var arr=sDate.split("-")

[/Quote]
上面的验证的是yyyy-mm-dd,yyyy-mm,yyyy格式
而我要的是YYYY-MM-DD,YYYYMMDD,YYYY/MM/DD
三个无法全部实现,至少要实现YYYY-MM-DD,YYYYMMDD
请高手不吝赐教!
回复
zjzb0409 2008-12-05
[Quote=引用 8 楼 virgo2008 的回复:]
<script language="javascript">
function chkDate(sDate)
{
var x=sDate.length
for (i=0;i <x;i++)
{
sDate=sDate.replace("/","-");
}
var r=/\d{4}(?:-\d{1,2}){0,2}/
//正则表达式,判断是否为yyyy-mm-dd,yyyy-mm,yyyy格式
if(sDate.match(r)==sDate)
{
var arr=sDate.split("-")

[/Quote]

不错
回复
virgo2008 2008-12-05
上面的我测试了下,能验证出来!
回复
virgo2008 2008-12-05
<script language="javascript">
function chkDate(sDate)
{
var x=sDate.length
for (i=0;i<x;i++)
{
sDate=sDate.replace("/","-");
}
var r=/\d{4}(?:-\d{1,2}){0,2}/
//正则表达式,判断是否为yyyy-mm-dd,yyyy-mm,yyyy格式
if(sDate.match(r)==sDate)
{
var arr=sDate.split("-")
switch(arr.length)
{
//根据不同的yyyy-mm-dd,yyyy-mm格式判断年月日数字是否正确
case 3:
var tmpDate=new Date(arr[0],arr[1],arr[2]);
if(tmpDate.getMonth()==arr[1] && tmpDate.getFullYear()==arr[0]) return true;
break;
case 2:
if(arr[1]<13) return true;
break;
case 1:
if(arr[0].length==4) return true;
break;
default:
return false;
}
}
return false;
}
</script>
<input type="text" name="txtdate" id="txtdate" size="20"><br>
<input type="button" name="Submit2" onclick="if (chkDate(document.all.txtdate.value)==false) {alert('输入的日期不合法!');document.all.txtdate.select();document.all.txtdate.focus();} else alert ('输入的日期合法。');" " value="CheckDate">

回复
fylhpu 2008-12-05
[Quote=引用 5 楼 virgo2008 的回复:]
"^\\d{2,4}[\\/\\-]?((((0?[13578])|(1[02]))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(3[01])))|(((0?[469])|(11))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(30)))|(0?[2][\\/\\-]?(0?[1-9]|[0-2][0-9])))$"
你用了正则提示什么错误啊?
[/Quote]
不执行啊
回复
fylhpu 2008-12-05

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>日期合法性判断</title>
<script language="javascript">
function chkDate(sDate)
{
for (i=0;i<sDate.length;i++)
{
sDate=sDate.replace("/","-");
}
var r=/\d{4}(?:-\d{1,2}){0,2}/
//正则表达式,判断是否为yyyy-mm-dd,yyyy-mm,yyyy格式
if(sDate.match(r)==sDate)
{
var arr=sDate.split("-")
switch(arr.length)
{
//根据不同的yyyy-mm-dd,yyyy-mm格式判断年月日数字是否正确
case 3:
var tmpDate=new Date(arr[0],arr[1],arr[2]);
if(tmpDate.getMonth()==arr[1] && tmpDate.getFullYear()==arr[0]) return true;
break;
case 2:
if(arr[1]<13) return true;
break;
case 1:
if(arr[0].length==4) return true;
break;
default:
return false;
}
}
return false;
}
</script>
</head>
<body>
<input type="text" name="txtdate" size="20"><br>
<input type="button" name="Submit2" onclick="if (chkDate(document.all.txtdate.value)==false) {alert('输入的日期不合法!');document.all.txtdate.select();document.all.txtdate.focus();} else alert ('输入的日期合法。');" value="CheckDate">
</body>
</html>

有没有高手帮改一下其中的正则表达式
正确格式为:yyyy-mm-dd,yyyymmdd,yyyy/mm/dd
回复
virgo2008 2008-12-05
你用了正则提示什么错误啊?
回复
xxxxxxxxia 2008-12-05
这是目前我发现最完整的
"^(19|20)\d{2}[\-\/\.](0?\d|1[012])[\-\/\.](0?\d|[12]\d|3[01])$"
'"^\d{4}[\-\/\.]\d{1,2}[\-\/\.]\d{1,2}$"
'"^(?:(?:1[6-9]|[2-9]\d)?\d{2}[\/\-\.](?:0?[1,3-9]|1[0-2])[\/\-\.](?:29|30))(?: (?:0?\d|1\d|2[0-3])\:(?:0?\d|[1-5]\d)\:(?:0?\d|[1-5]\d)(?: \d{1,3})?)?$|^(?:(?:1[6-9]|[2-9]\d)?\d{2}[\/\-\.](?:0?[1,3,5,7,8]|1[02])[\/\-\.]31)(?: (?:0?\d|1\d|2[0-3])\:(?:0?\d|[1-5]\d)\:(?:0?\d|[1-5]\d)(?: \d{1,3})?)?$|^(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])[\/\-\.]0?2[\/\-\.]29)(?: (?:0?\d|1\d|2[0-3])\:(?:0?\d|[1-5]\d)\:(?:0?\d|[1-5]\d)(?: \d{1,3})?)?$|^(?:(?:16|[2468][048]|[3579][26])00[\/\-\.]0?2[\/\-\.]29)(?: (?:0?\d|1\d|2[0-3])\:(?:0?\d|[1-5]\d)\:(?:0?\d|[1-5]\d)(?: \d{1,3})?)?$|^(?:(?:1[6-9]|[2-9]\d)?\d{2}[\/\-\.](?:0?[1-9]|1[0-2])[\/\-\.](?:0?[1-9]|1\d|2[0-8]))(?: (?:0?\d|1\d|2[0-3])\:(?:0?\d|[1-5]\d)\:(?:0?\d|[1-5]\d)(?: \d{1,3})?)?$"
再给你个简单点但比较实用的
^(19|20)\d{2}[\-\/\.](0?\d|1[012])[\-\/\.](0?\d|[12]\d|3[01])$
回复
fylhpu 2008-12-05
[Quote=引用 2 楼 virgo2008 的回复:]
"^\\d{2,4}[\\/\\-]?((((0?[13578])|(1[02]))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(3[01])))|(((0?[469])|(11))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(30)))|(0?[2][\\/\\-]?(0?[1-9]|[0-2][0-9])))$"
[/Quote]
用不了
回复
virgo2008 2008-12-05
"^\\d{2,4}[\\/\\-]?((((0?[13578])|(1[02]))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(3[01])))|(((0?[469])|(11))[\\/|\\-]?((0?[1-9]|[0-2][0-9])|(30)))|(0?[2][\\/\\-]?(0?[1-9]|[0-2][0-9])))$"
回复
fylhpu 2008-12-05

<script language=javascript>
function strDateTime(str)
{
var reg =/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
//^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
if (newStr != str) alert("时间格式不对!");
}
</script>

上面这个的就不要再贴了,上面的一输入YYYY-MM-DD就报“格式不对”
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-12-05 04:00
社区公告
暂无公告