function dateVerify(date){
var reg = /^(\d{4})([\/,-])(\d{1,2})\2(\d{1,2})$/;
var r = date.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();
date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);
return newStr==date;
}
var reg = /^(\d{4})([\/,-])(\d{1,2})\2(\d{1,2})$/;
var r = date.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();
date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);
return newStr==date;
}
解决方案 »
- 通过什么方法可以获取某个dom元素上面都绑定了哪些事件
- 伸手党求正则
- 高分求助:JS读写XML文件
- 非常着急,如何在iframe里面打印预览iframe里面的内容
- 有很多div的页面, 能不能实现可以拖动调整布局的效果。这个js如何书写?
- 怎么样写163中邮件添加附件的函数?
- 取jsp页面内容
- 大型项目外包,欢迎有能力人士接单
- 高分求Email地址的正则表达式验证,最好有比较完整的JS。(在线等)
- 请问用javascript如何动态获取一个文本框的坐标???
- 如何用Javascript判断客户端注册表中是否有值为00100000-B1BA-11CE-ABC6-F5B2E79D9E3F的clsid?
- document.body.outerHtml这是什么意思?
String.prototype.isTime = function()
{
var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
if(r==null)return false; var d = new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()==r[7]);
}
alert("2002-1-31 12:34:56".isTime());
alert("2001-2-29 12:54:56".isTime());
alert("2002-1-41 12:00:00".isTime());
</script>
^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$
我刚才针对这段正则表达式测试了一下
1、校验内容不为空 的功能实现了
2、格式必须符合日期+时间(YYYY-MM-DD HH:MM:SS)格式 的功能没有实现。
比如:我输入2005-10-11 17:80:30 也可以校验通过
function Date_Compare(asStartDate,asEndDate){
var miStart = Date.parse(asStartDate.replace(/\-/g, '/'));
var miEnd = Date.parse(asEndDate.replace(/\-/g, '/'));
return (miEnd-miStart)/(1000*24*3600);
} /*-- 判断一个字符串(YYYY-MM-DD)的日期是否正确 -- */
function Date_istrue(asDate){
var lsDate = asDate + "";
var loDate = lsDate.split("-");
if (loDate.length!=3) return false;
var liYear = parseInt(loDate[0]);
var liMonth = parseInt(loDate[1]);
var liDay = parseInt(loDate[2]);
if ((loDate[0].length>4)||(loDate[1].length>2)||(loDate[2].length>2)) return false;
if (isNaN(liYear)||isNaN(liMonth)||isNaN(liDay)) return false;
if ((liYear<1900)||(liYear>3000)) return false;
if ((liMonth>12)||(liMonth<=0)) return false;
if (Date_getDay(liYear,liMonth)<liDay) return false;
return !isNaN(Date.UTC(liYear,liMonth,liDay));
} /*-- 返回某年某月的天数-- */
function Date_getDay(aiYear,aiMonth){
var loDay = [0,31,28,31,30,31,30,31,31,30,31,30,31];
if (aiYear%4==0) loDay[2] = 29;
return loDay[aiMonth];
}怎么样用JavaScript或者JScript将“2003-1-6”这样的格式转换成“2003-01-06”这样的格式?
---------------------------------------------------------------
<script language=javascript>
function changedate(temp)
{ arrdate=temp.split('-');
if (arrdate.length<2)
{return temp;}
else
{
if (arrdate[1].length==1)
{arrdate[1]="0"+arrdate[1];}
if (arrdate[2].length==1)
{arrdate[2]="0"+arrdate[2];}
return arrdate.join("-");
}
}
</script>
---------------------------------------------------------------
var re=/([0-9]{4})-([0-9]{1})-([0-9]{1})/g;
var s="2003-1-6";
s=s.replace(re,"$1-0$2-0$3");
alert(re.length());
---------------------------------------------------------------
<script>
function a(s){return s.replace(/-(\d)(?=\D |$)/g,"-0$1");}
alert(a("2003-1-6"));
alert(a("2003-10-6"));
alert(a("2003-1-16"));
</script>______________________________________
判断一个日期是否正确
如出现:2005-12-50这个日期的,就是错误的
<script language=javascript>
String.prototype.isDate = function()
{
var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if(r==null)return false; var d = new Date(r[1], r[3]-1, r[4]);
return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}
alert("2005-12-50".isDate());
alert("2005-12-30".isDate());
</script>
输入日期格式yyyy-mm-dd,用JS判断如果输入的是当前日期所在月(比如2002-05-**)或者是上个月(2002-04-**),则允许提交,否则不允许提交,给出提示信息。
非常感谢!
---------------------------------------------------------------
var dt = new Date();
当前日期所在月: dt.getMonth()+1
---------------------------------------------------------------
如果当前月份是一月呢
所以建议用时间差,改为
<form onsubmit="return(check(d.value))">
<input name=d>
</form>
<script>
function check(str){
var dt = new Date();
var reg = /^(\d{4})-(\d{1,2})-\d{1,2}$/;
if(arr=str.match(reg)){
if(arr[1] == dt.getFullYear() && arr[2] == (dt.getMonth()+1))return true;
dt.setDate(0);
if(arr[1] == dt.getFullYear() && arr[2] == (dt.getMonth()+1))return true;
}
alert("error");
return false;
}
</script>
其实我想要的只是正则表达式,而不是您的函数,因为我现在是在.net下做winForms的开发,我们写了一个利用正则表达式验证输入框文本是否符合业务要求的通用函数,现在目标是想只替换里面的对应正则表达式来解决验证日期+时间格式有效性的问题.
^_^
^20[\d]{2}-(?:0{0,1}\d|1[0-2])-(?:[0-2]{0,1}\d|3[01]) (?:[01]{0,1}\d|2[0-3]):[0-6]{0,1}\d:[0-6]{0,1}\d$12 小时制:
^20[\d]{2}-(?:0{0,1}\d|1[0-2])-(?:0{0,1}\d|1[0-2]) (?:[01]{0,1}\d|2[0-3]):[0-6]{0,1}\d:[0-6]{0,1}\d (?:AM|PM)$没有做闰月、年检测
(?:[02468][048]|[13579][26])100内非四的倍数:
(?:[02468][^0^4^8]|[13579][^2^6])400的倍数高两位:
(?:[02468][048]|[13579][26])[02468](?=00))非400的倍数的高两位:
(?:[02468][^0^4^8]|[13579][^2^6])(?=00)平年(非4的倍数或400的倍数)
(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)闰年(4的倍数且非400倍数)
(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])============================================大月:
[13578(?:10)(?:12)](?:[0-2]\d|3[01])小月:
[469(?:11)](?:[0-2]\d|30)闰二月:
(?:[01]\d|2[0-8])平二月
(?:[01]\d|2[0-7])平年月份 + 日:
(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年月份 + 日:
(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))平年 + 月份 + 日
(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年 + 月份 + 日
(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))============================================完整年月日
(?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))============================================时间(12小时制):
(?:[0]?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?:AM|PM)时间(24小时制):
(?:[01]\d|2[0-3]):[0-5]?\d:[0-5]?\d=================================================完整 YYYY-MM-DD HH-MM-SS(12小时制)
(?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))) (?:[0]?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?:AM|PM)完整 YYYY-MM-DD HH-MM-SS(24小时制)
(?:(?:\d\d(?:[02468][^0^4^8]|[13579][^2^6])|(?:[02468][048]|[13579][26])[02468](?=00))\d\d)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?:[02468][^0^4^8]|[13579][^2^6])(?=00)\d\d)\d\d(?:[02468][048]|[13579][26])(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:[01]\d|2[0-3]):[0-5]?\d:[0-5]?\d
(?:[02468][^0^4^8]|[13579][^2^6])
=>
(?:[02468][1235679]|[13579][01345789])============================================故后面的应该改成:100内四的倍数:
(?:[02468][048]|[13579][26])100内非四的倍数:
(?:[02468][1235679]|[13579][01345789])400的倍数:
(?:[02468][048]|[13579][26])00平年(非4的倍数或400的倍数)
(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)闰年(4的倍数且非400倍数)
(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))============================================大月:
[13578(?:10)(?:12)](?:[0-2]\d|3[01])小月:
[469(?:11)](?:[0-2]\d|30)闰二月:
(?:[01]\d|2[0-8])平二月
(?:[01]\d|2[0-7])平年月份 + 日:
(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年月份 + 日:
(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))平年 + 月份 + 日
(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))闰年 + 月份 + 日
(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8]))============================================完整年月日
(?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))============================================时间(12小时制):
(?:0?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?: ?AM|PM)时间(24小时制):
(?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d=================================================完整 YYYY-MM-DD HH-MM-SS(12小时制)
(?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:0?\d|1[0-2]):[0-5]?\d:[0-5]?\d(?: ?AM|PM)完整 YYYY-MM-DD HH-MM-SS(24小时制)
(?:(?:\d\d(?:[02468][1235679]|[13579][01345789])|(?:[02468][048]|[13579][26])00)(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-7]))|(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))(?:[13578(?:10)(?:12)](?:[0-2]\d|3[01])|[469(?:11)](?:[0-2]\d|30)|(?:[01]\d|2[0-8])))(?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d
(?=(?!(?:[02468][048]|[13579][26])00))|\d\d(?:[02468][048]|[13579][26]))
=>
(?=(?!(?:[02468][048]|[13579][26])00))\d\d(?:[02468][048]|[13579][26])