我始终没有找到完美的日期验证正则表达式,这要问题就是对瑞年的判断。
我们知道,每 400 年会有 97 个闰年(参见高中《地理》课本),完整的瑞年判断是这样的:
瑞年的年份
1) 若是整百年,能被 400 整除
否则
2) 能被 4 整除
我们知道,每 400 年会有 97 个闰年(参见高中《地理》课本),完整的瑞年判断是这样的:
瑞年的年份
1) 若是整百年,能被 400 整除
否则
2) 能被 4 整除
下面给出代码,主要是为 String 原型添加 isDate 方法:
下面的正则表达式可以看成是由三个正则表达式拼接而成,瑞年二月判断、非闰年二月判断、其它月份判断。
<script language="javascript" type="text/javascript">
// 分隔符
Separator = {
ANY: ".",
DASH: "-",
DOT: "\\.",
SLASH: "/"
};
String.prototype.isDate = function(sep)
{
var reStr = "^(((([0-9]{2}(([2468][048])|([02468][48])|([13579][26])))|((([02468][048])|([13579][26]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1-2][0-9])))|((([0-9]{2}([02468][1235679])|([13579][01345789]))|((([02468][1235679])|([13579][01345789]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1][0-9])|([2][0-8])))|(([0-9]{4})(-)(((([0]?(1|3|5|7|8))|(10|12))(-)(([0]?[1-9])|([1-2][0-9])|30|31))|(((([0]?(4|6))|11))(-)(([0]?[1-9])|([1-2][0-9])|30)))))$";
if(typeof(sep) == "string")
reStr = reStr.replace(/\(-\)/g, "(" + sep + ")");
var re = new RegExp(reStr, "g");
return re.test(this);
};
function check()
{
var bb = document.getElementById("TextBox1").value;
//alert(bb.isDate());
//alert(bb.isDate(Separator.ANY)) ;
//alert(bb.isDate(Separator.DASH)) ;
//alert(bb.isDate(Separator.DOT)) ;
alert(bb.isDate(Separator.SLASH));
}
</script>
本篇文章为转载,来自:GisCell的blogs http://blog.csdn.net/giscell/archive/2007/06/22/1662209.aspx// 分隔符
Separator = {
ANY: ".",
DASH: "-",
DOT: "\\.",
SLASH: "/"
};
String.prototype.isDate = function(sep)
{
var reStr = "^(((([0-9]{2}(([2468][048])|([02468][48])|([13579][26])))|((([02468][048])|([13579][26]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1-2][0-9])))|((([0-9]{2}([02468][1235679])|([13579][01345789]))|((([02468][1235679])|([13579][01345789]))(00)))(-)(2|02)(-)(([0]?[1-9])|([1][0-9])|([2][0-8])))|(([0-9]{4})(-)(((([0]?(1|3|5|7|8))|(10|12))(-)(([0]?[1-9])|([1-2][0-9])|30|31))|(((([0]?(4|6))|11))(-)(([0]?[1-9])|([1-2][0-9])|30)))))$";
if(typeof(sep) == "string")
reStr = reStr.replace(/\(-\)/g, "(" + sep + ")");
var re = new RegExp(reStr, "g");
return re.test(this);
};
function check()
{
var bb = document.getElementById("TextBox1").value;
//alert(bb.isDate());
//alert(bb.isDate(Separator.ANY)) ;
//alert(bb.isDate(Separator.DASH)) ;
//alert(bb.isDate(Separator.DOT)) ;
alert(bb.isDate(Separator.SLASH));
}
</script>