var reg = /^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))$/
<script type="text/javascript" language="javascript"> <!-- function checkForm() { var reg=/^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))$/;
chkdate = function(str){
alert(makedate(str.split(/\-/g)));//"Invalid Date" 即不合法的日期
}makedate = function(arr)
{
return new Date(arr[0],arr[1],arr[2]);
}</script>
<input type="text" onblur="chkdate(this.value)" value="2011-12-12" />
过客的这个正则已经考虑了闰年。
至于效率,不是长的正则效率一定低,这个正则里没有使用环视,在回溯方面问题也不大。如果是检测数量有限的日期的话,相信不会令你有所察觉
就用这个了,我在js中这样写的:还是不成~初学javascript,哪写错了?
<script type="text/javascript" language="javascript">
<!--
function checkForm()
{
/*Regex reg=new Regex([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])));*/
if(document.wirte.title.value.length==0)
{
alert("请您输入留言标题");
return false;
}
if(document.wirte.lydate.value.length==0)
{
alert("请您输入留言日期");
return false;
}
else
{
var date=document.wirte.lydate.value;
if(date.matches(reg))
{}
else
{
alert("请输入正确的日期格式"YYYY-MM-DD"");
}
}
}
-->
</script>
<!--
function checkForm()
{
var reg=/^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))$/;
if(document.wirte.title.value.length==0)
{
alert("请您输入留言标题");
return false;
}
if(document.wirte.lydate.value.length==0)
{
alert("请您输入留言日期");
return false;
}
else
{
var date=document.wirte.lydate.value;
alert(date);
if(reg.test(date))
{
alert("正确");
}
else
{
alert("请输入正确的日期格式"YYYY-MM-DD"");
return false;
}
}
}
-->
</script>提交表单:
<form action="" method="post" onSubmit="return checkForm()" name="wirte">
没反应,哪里写错了~我看了好几遍,多谢了