历史上最详细的js正则表达式共享
最简单的正则化为:2 { { 4 } { 2 }但实际情况并不是那么简单,要考虑,有效性和闰年等等…
对于日期的有效范围,不同的应用场景会有不同的定义。在MSDN的DateTime对象的有效范围是:0001-01-01 9999-12-31 00:00:00到23:59:59。
0的Unix时间戳是基于ISO 8601规范:1970-01-01t00:00:00z。
首先考虑前三个与年份无关的规则,而这一年可以用统一的方式书写。
(!0000){ 0-9 } { 4 }
以下是这个月和一天的规律性
1。年,包括年、月、日、包括1-28
(0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 0-8 2 { })
2。全年,包括全年,二月除外,分别为29和30。
(0 { 1 } { } | 13-9 0-2)-(29 | 30)
3。一年,包括所有1, 3, 5年,7, 8, 10,31,十二月都包括在内。
(0 { 13578 } | 1 { 02 })- 31)
除了闰年的2月29日外,所有的约会都在一起。
(0000!)({ 0-9 } { 4 } -(0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 0-8 2 { })|(0 { 1 } { } | 13-9 0-2)-(29 | 30)|(0 { 13578 } | 1 { 02 })- 31)
其次,考虑闰年的实现。
1:四年闰
({ 0-9 } { 2 }(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })
2:百年不跃进,四百年飞跃
(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })00
3:一起是所有闰年的2月29日。
({ 0-9 } { 2 }(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })|(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })00)- 02-29)
四规则已经实施,彼此互不影响,这是所有的日期,日期范围符合规则。
((0000!)({ 0-9 } { 4 } -(0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 0-8 2 { })|(0 { 1 } { } | 13-9 0-2)-(29 | 30)|(0 { 13578 } | 1 { 02 })- 31({ 0-9 } { 2 })|(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })|(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })00)- 02-29)。
考虑到正则表达式仅用于验证,捕获组没有意义,只占用资源,影响匹配效率,因此可以使用非捕获组对其进行优化。
((0000!)({ 0-9 } { 4 } -(::0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 2 { } |(0-8):0 { 1 } { } | 13-9 0-2)-(29 | |(30):0 { 13578 } | 1 { 02 })|(31):{ 0-9 } { 2 }(0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })|(:0 { 48 } | { 2468 } { 048 } | { 13579 } { 26 })00)- 02-29)。
分类:Javascript
js日期正则表达式支持每月验证
这个js日期正则表达式支持月验证,我们将举例说明日期验证表达式的函数示例。
IsDate函数(STR){
Var(结果= str.match / ^(D { 4 })(- | /)(D {1,2})(D {1,2}) / 2);
如果(结果= NULL)返回false;
var =新日期(结果{ 1 },结果{ 3 } - 1,结果{ 4 });
返回(d.getfullyear()= =结果{ 1 } d.getmonth()+ 1 = =结果{ 3 } d.getdate()= =结果{ 4 });
}
检查是否为| | yyyy /毫米/ DD日期格式
月球表面只考虑月亮和白天的规律。
1。年,包括年、月、日、包括1-28
(0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 0-8 2 { })
2。全年,包括全年,二月除外,分别为29和30。
(0 { 1 } { } | 13-9 0-2)-(29 | 30)
3。一年,包括所有1, 3, 5年,7, 8, 10,31,十二月都包括在内。
(0 { 13578 } | 1 { 02 })- 31)
除了闰年的2月29日外,所有的约会都在一起。
(0000!)({ 0-9 } { 4 } -(0 { 1 } { 0 } | 1-9)-(0 { 1 } { } | 1-9 0-9 | 0-8 2 { })|(0 { 1 } { } | 13-9 0-2)-(29 | 30)|(0 { 13578 } | 1 { 02 })- 31)
功能isdatetime(STR)
{
Var(结果= str.match / ^(D { 4 })(- | /)(D {1,2})2(D {1,2})(D {1,2}):(D {1,2}):(D {1,2}) /);
如果(结果= NULL)返回false;
var =新日期(结果{ 1 },结果{ 3 } - 1,结果{ 4 },结果{ 5 },结果{ 6 },结果{ 7 });
(d.getfullyear(= =)返回结果{ 1 }(d.getmonth()+ 1)= =结果{ 3 } d.getdate()= =结果{ 4 } d.gethours()= =结果{ 5 } d.getminutes()= =结果{ 6 } d.getseconds()= =结果{ 7 }。
}
确定是否输入是有效的 / / 长日期格式为年/毫米/ DD HH:MM:SS HH:MM:SS| |
这是yyyy-mm-dd HH:毫米:SS
(d { 4 })-(d { 2 })-(d { 2 })(d { 2 }):(d { 2 }):($ / d { 2 });
这是ddde yyyy mm
(d { 4 })-(d { 2 })-(d { 2 })