送分了,日期格式匹配的正则表达式问题!

hui2008 2002-10-11 05:49:18
匹配这种格式的正则表达式!
2000-01-01
...全文
143 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
希默软件 2002-10-18
  • 打赏
  • 举报
回复
已经纠正错误了

<script>
var theyear,themonth,thedate
var info=new

Array("01",31,"02",28,"03",31,"04",30,"05",31,"06",30,"07",31,"08",31,"09",30,"10",31,"11",30,"12",31)
var msg="非法日期";
function checkDate(objdate){
theyear=objdate.substr(0,4)
themonth=objdate.substr(5,2)
thedate=objdate.substr(8,2)
var re=/\d{4}-\d{2}-\d{2}/
if(re.test(objdate)==true){
if(parseInt(theyear)%4!=0||(parseInt(objdate.substr(0,2))%4!=0&&objdate.substr(2,2)=="00"))
check()
else{
info[3]=29;
check()
}
}
function check(){
for(i=0;i<12;i++){
if(themonth==info[2*i]&&parseInt(thedate)<=info[2*i+1]&&parseInt(thedate)>0){
msg="正确日期";
break;}
else
msg="非法日期";
}
}
alert(msg);
}
checkDate("1900-02-29")
</script>
JK_10000 2002-10-18
  • 打赏
  • 举报
回复
功能:认多种格式,能自动纠错,
测试值:
2.2.3
2002.3.20
2002.2.30
fdsa




<input name=a alt="日期1" onblur="checkDateInput(this)" >

<script language=javascript>

function checkDateInput(obj) //用于检查日期输入是否正确 (日期输入范围为1930-01-01 到2200-12-31)
{
if (obj.value.length==0) return false;
var objValue=obj.value.replace(/[-\.]/g,"/");

try
{
var a=new Date(objValue);
if (isNaN(a))
{
obj.value="";
alert("!!!!请注意:\n您刚才输入的日期不正确,我们已进处了清除。");
obj.focus();
return false;
}
var b;
if (a.getFullYear()<1900||a.getFullYear()>2200)
{var Today=new Date();
b=Today.getFullYear()+"-"+(a.getMonth()+1)+"-"+a.getDate();
}
else if (a.getFullYear()<1930)
b=(a.getFullYear()+100)+"-"+(a.getMonth()+1)+"-"+a.getDate();
else b=a.getFullYear()+"-"+(a.getMonth()+1)+"-"+a.getDate();
obj.value=obj.value.replace(/[-\.\/]0*/g,"-");
if (b!=obj.value)
{
obj.value=b;
alert("!!!!请注意:\n您刚才输入的日期不正确,我们已进行了修改。");
obj.select();
obj.focus();
return false;
}
}
catch(Exception)
{
obj.value="";
alert("!!!!请注意:\n您刚才输入的日期不正确,我们已进处了清除。");
obj.focus();
return false;
}
return true;
}


</script>
希默软件 2002-10-18
  • 打赏
  • 举报
回复
咦,1900年果然没有2月29日,我一直以为按理除以四等于0就对,是我的疏忽,还有类似的吗?
rohn 2002-10-18
  • 打赏
  • 举报
回复
qiushuiwuhen(秋水无恨)
you are right!
you are good!
qiushuiwuhen 2002-10-12
  • 打赏
  • 举报
回复
to bencalie(Bencalie) :checkDate("1900-02-29")

to coolhealth(漫漫追求):可以呀,没有undefined
<script language=javascript>
function strDateTime(str){
var reg = /^(\d{1,4})-(\d{1,2})-(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], --r[2],r[3]);
if(d.getFullYear()!=r[1])return false;
alert(r[1])
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
return true;
}
alert(strDateTime("2000-01-01"))
alert(strDateTime("abc2002-01-01def"))
alert(strDateTime("2000-02-30"))
</script>

Go_Rush 2002-10-12
  • 打赏
  • 举报
回复
...
希默软件 2002-10-12
  • 打赏
  • 举报
回复
我遗漏哪里了?老实说,没有太多的验证
这段是处理闰年的:
else{
info[3]=29;
for(j=0;j<12;j++){
if(themonth==info[2*j]&&parseInt(thedate)<=info[2*j+1]&&parseInt(thedate)>0){
msg="正确日期";
break;}
else
msg="非法日期";
}
}
coolhealth 2002-10-12
  • 打赏
  • 举报
回复
bencalie(Bencalie) 与 qiushuiwuhen(秋水无恨) 都对极了。

不过前者的比较易懂和通俗(闰年的问题掉了一点)

而后者秋水的则是比较的难懂和简洁了。

秋水的一句:
var d=new Date([r[1],r[2],r[3])是关健的。

不过我对这句还是不清楚,请教秋水,为什么 在用了这句之后,经比较相等于否这时再用alert(r[1])等时却显示undefined呢?而比较又通得过?这句话的具体意思 是什么 呢?秋水??
qiushuiwuhen 2002-10-11
  • 打赏
  • 举报
回复
修正如下
<script language=javascript>
function strDateTime(str){
var reg = /^(\d{1,4})-(\d{1,2})-(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
var d= new Date(r[1], --r[2],r[3]);
if(d.getFullYear()!=r[1])return false;
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
return true;
}
alert(strDateTime("2000-01-01"))
alert(strDateTime("abc2002-01-01def"))
alert(strDateTime("2000-02-30"))
</script>

qiushuiwuhen 2002-10-11
  • 打赏
  • 举报
回复
1.

<script>
var re=/\d{4}-\d{2}-\d{2}/
alert(re.test("abc2002-01-01def"))
</script>

2.
<script language=javascript>
function strDateTime(str){
var reg = /^(\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()
return newStr==str
}
alert(strDateTime("2000-01-01"))
</script>

希默软件 2002-10-11
  • 打赏
  • 举报
回复
<script>
function checkDate(objdate){
var msg;
var info=new Array("01",31,"02",28,"03",31,"04",30,"05",31,"06",30,"07",31,"08",31,"09",30,"10",31,"11",30,"12",31)
var theyear=objdate.substr(0,4)
var themonth=objdate.substr(5,2)
var thedate=objdate.substr(8,2)
var re=/\d{4}-\d{2}-\d{2}/
if(re.test(objdate)==true){
if(parseInt(theyear)%4!=0){
for(i=0;i<12;i++){
if(themonth==info[2*i]&&parseInt(thedate)<=info[2*i+1]&&parseInt(thedate)>0){
msg="正确日期";
break;}
else
msg="非法日期";
}
}
else{
info[3]=29;
for(j=0;j<12;j++){
if(themonth==info[2*j]&&parseInt(thedate)<=info[2*j+1]&&parseInt(thedate)>0){
msg="正确日期";
break;}
else
msg="非法日期";
}
}
}
else
msg="非法日期";
alert(msg);
}
checkDate("2001-02-28")
</script>
hui2008 2002-10-11
  • 打赏
  • 举报
回复
onestab(┼─)是对的,单纯格式合法bencalie(Bencalie)的就可以了!
加些规则进去:
年:1900-2050
月:01-12
日:01-31
方工 2002-10-11
  • 打赏
  • 举报
回复
事情不像看起来那么简单,请看
<script>
var newDateObj = new Date("2002/02/30 12:00:22");
if(newDateObj!=null){
alert(newDateObj.toLocaleString());
//显示:2002年3月2日12:00:22
}
</script>
格式合法,不一定日期合法,如上例。
建议还是写验证代码,或采用日期选取控件。
google search for:
javascript date validation
dylanOK 2002-10-11
  • 打赏
  • 举报
回复
为什么非用正规表达式呢
用这个不更好?!

<script>
var newDateObj = new Date("2002/02/24 12:00:22");
if(newDateObj!=null){
alert(newDateObj.toLocaleString());

}
</script>
Date的
其它方法:
Date.prototype 的成员
getDate 方法
getDay 方法
getFullYear 方法
getHours 方法
getMilliseconds 方法
getMinutes 方法
getMonth 方法
getSeconds 方法
getTime 方法
getTimezoneOffset 方法
getUTCDate 方法
getUTCDay 方法
getUTCFullYear 方法
getUTCHours 方法
getUTCMilliSeconds 方法
getUTCMinutes 方法
getUTCMonth 方法
getUTCSeconds 方法
getVarDate 方法
getYear 方法
setDate 方法
setFullYear 方法
setHours 方法
setMilliSeconds 方法
setMinutes 方法
setMonth 方法
setSeconds 方法
setTime 方法
setUTCDate 方法
setUTCFullYear 方法
setUTCHours 方法
setUTCMilliseconds 方法
setUTCMinutes 方法
setUTCMonth 方法
setUTCSeconds 方法
setYear 方法
toGMTString 方法
toLocaleString 方法
toUTCString 方法
toString 方法
valueOf 方法


Date.prototype 非成员
parse 方法
UTC 方法


meizz 2002-10-11
  • 打赏
  • 举报
回复
<script language=javascript>
function strDateTime(str){
var reg = /^(\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()
return newStr==str
}
alert(strDateTime("2002-1-31"))
alert(strDateTime("2002-1-41"))
</script>
希默软件 2002-10-11
  • 打赏
  • 举报
回复
<script>
var re=/\d{4}-\d{2}-\d{2}/
var a="2002-01-01"
var b="2002/01/01"
alert(re.test(a))
alert(re.test(b))
</script>

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧