求一个yyyyMMdd日期格式的正则表达式,谢谢啦

时间:2023-01-07 18:48:07
求一个验证日期yyyyMMdd格式的正则表达式,要求把闰月也考虑进去。谢谢各位

14 个解决方案

#1


使用正则表达式,就可以: 

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。


lz 所说滴闰月属于逻辑判断,而正则表达式仅仅是字符串匹配,因此要靠写函数判断!

#2



//楼主为啥不用日历控件呢?

  <script type="text/javascript">
  <!--
var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9][0-9])?[0-9]{2})([-/.])(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1[0-9]|2[0-8]))))$/;
alert(reg.test("2008-02-03"))
alert(reg.test("2009/02/28")) // 28天为true
alert(reg.test("2009/02/29")) // 29为false
  //-->
  </script>

#3


引用 1 楼 yixianggao 的回复:
使用正则表达式,就可以:

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。


lz 所说滴闰月属于逻辑判断,而正则表达式仅仅是字符串匹配,因此要靠写函数判断!

哦。谢谢。不过有类似的函数吗

#4


#2 滴正则够狠,穷举法!

基本格式检查

L@_@K
// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31
var regyyyyMMdd = /^[12]\d{3}(0\d|1[0-2])([0-2]\d|3[01])$/;

document.write("20091021", ": ", regyyyyMMdd.test("20091021"), "<br />");
document.write("20093121", ": ", regyyyyMMdd.test("20093121"), "<br />");
document.write("20091321", ": ", regyyyyMMdd.test("20091321"), "<br />");
document.write("20090331", ": ", regyyyyMMdd.test("20090331"), "<br />");
document.write("20090332", ": ", regyyyyMMdd.test("20090332"), "<br />");

#5


引用 2 楼 click_me 的回复:
JScript code//楼主为啥不用日历控件呢?<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|¡­

有日历控件,但是也可以入力的。谢谢先。试下。。。。。。。

#6


引用 2 楼 click_me 的回复:
JScript code//楼主为啥不用日历控件呢?<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|¡­

麻烦再帮下忙呗。我只要yyyyMMdd格式的。谢谢啦

#7


引用 4 楼 yixianggao 的回复:
#2 滴正则够狠,穷举法!

基本格式检查

L@_@K
JScript code// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31var regyyyyMMdd=/^[12]\d{3}(0\d|1[0-2])([0-2]\d|3[01])$/;

document.write("20091021",":", regyyyyMMdd.test("20091021"),"<br />");
document.write("20093121",":", regyyyyMMdd.test("20093121"),"<br />");
document.write("20091321",":", regyyyyMMdd.test("20091321"),"<br />");
document.write("20090331",":", regyyyyMMdd.test("20090331"),"<br />");
document.write("20090332",":", regyyyyMMdd.test("20090332"),"<br />");

这样的好像判断不出来闰月吧。。。

#8



  <script type="text/javascript">
  <!--
    var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))()(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9][0-9])?[0-9]{2})()(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1[0-9]|2[0-8]))))$/;
    alert(reg.test("20080203"))
    alert(reg.test("2009/02/28")) // 28天为true
    alert(reg.test("20090229")) // 29为false
  //-->
  </script>

#9


引用 3 楼 dp_derek 的回复:
哦。谢谢。不过有类似的函数吗


配合格式检查可以做到

L@_@K

function validateDateStr(yyyyMMdd)
{
// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31
var reg = /^([12]\d{3})(0\d|1[0-2])([0-2]\d|3[01])$/;

if (reg.test(yyyyMMdd))
{
var arr = reg.exec(yyyyMMdd);
var d = new Date(parseInt(arr[1]), parseInt(arr[2])-1, parseInt(arr[3]));

return (d.getMonth()+1)==parseInt(arr[2]) && d.getDate()==parseInt(arr[3]);
}
else
return false;
}

document.write("20091021", ": ", validateDateStr("20091021"), "<br />");
document.write("20093121", ": ", validateDateStr("20093121"), "<br />");
document.write("20091321", ": ", validateDateStr("20091321"), "<br />");
document.write("20090331", ": ", validateDateStr("20090331"), "<br />");
document.write("20090332", ": ", validateDateStr("20090332"), "<br />");
document.write("20090229", ": ", validateDateStr("20090229"), "<br />");
document.write("20080229", ": ", validateDateStr("20080229"), "<br />");
document.write("20080230", ": ", validateDateStr("20080230"), "<br />");

#10


引用 8 楼 click_me 的回复:
JScript code<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))()(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-¡­

高手。结贴

#11


引用 9 楼 yixianggao 的回复:
引用 3 楼 dp_derek 的回复:哦。谢谢。不过有类似的函数吗

配合格式检查可以做到

L@_@K

JScript codefunction validateDateStr(yyyyMMdd)
{// yyyy: 1000-2999// MM: 01-12// dd: 01-31var reg=/^([12]\d{3})(0\d|1[0-2])([0-2]\d|3[01])$/;if (reg.test(yyyyMMdd))
    {var arr= reg.exec(yyyyMMdd);var d=new Date(parseInt(arr[1]), parseInt(arr[2])-1, parseInt(arr[3]));return (d.getMonth()+1)==parseInt(arr[2])&& d.getDate()==parseInt(arr[3]);
    }elsereturnfalse;
}

document.write("20091021",":", validateDateStr("20091021"),"<br />");
document.write("20093121",":", validateDateStr("20093121"),"<br />");
document.write("20091321",":", validateDateStr("20091321"),"<br />");
document.write("20090331",":", validateDateStr("20090331"),"<br />");
document.write("20090332",":", validateDateStr("20090332"),"<br />");
document.write("20090229",":", validateDateStr("20090229"),"<br />");
document.write("20080229",":", validateDateStr("20080229"),"<br />");
document.write("20080230",":", validateDateStr("20080230"),"<br />");

同样感谢。

#12


把闰月也考虑进去?
楼主太强了,正则表达式不具有任何的数学计算功能。

#13


2楼真强!!!佩服佩服!!!

#14


该回复于2010-02-23 16:36:09被版主删除

#1


使用正则表达式,就可以: 

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。


lz 所说滴闰月属于逻辑判断,而正则表达式仅仅是字符串匹配,因此要靠写函数判断!

#2



//楼主为啥不用日历控件呢?

  <script type="text/javascript">
  <!--
var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9][0-9])?[0-9]{2})([-/.])(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1[0-9]|2[0-8]))))$/;
alert(reg.test("2008-02-03"))
alert(reg.test("2009/02/28")) // 28天为true
alert(reg.test("2009/02/29")) // 29为false
  //-->
  </script>

#3


引用 1 楼 yixianggao 的回复:
使用正则表达式,就可以:

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。


lz 所说滴闰月属于逻辑判断,而正则表达式仅仅是字符串匹配,因此要靠写函数判断!

哦。谢谢。不过有类似的函数吗

#4


#2 滴正则够狠,穷举法!

基本格式检查

L@_@K
// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31
var regyyyyMMdd = /^[12]\d{3}(0\d|1[0-2])([0-2]\d|3[01])$/;

document.write("20091021", ": ", regyyyyMMdd.test("20091021"), "<br />");
document.write("20093121", ": ", regyyyyMMdd.test("20093121"), "<br />");
document.write("20091321", ": ", regyyyyMMdd.test("20091321"), "<br />");
document.write("20090331", ": ", regyyyyMMdd.test("20090331"), "<br />");
document.write("20090332", ": ", regyyyyMMdd.test("20090332"), "<br />");

#5


引用 2 楼 click_me 的回复:
JScript code//楼主为啥不用日历控件呢?<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|¡­

有日历控件,但是也可以入力的。谢谢先。试下。。。。。。。

#6


引用 2 楼 click_me 的回复:
JScript code//楼主为啥不用日历控件呢?<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|¡­

麻烦再帮下忙呗。我只要yyyyMMdd格式的。谢谢啦

#7


引用 4 楼 yixianggao 的回复:
#2 滴正则够狠,穷举法!

基本格式检查

L@_@K
JScript code// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31var regyyyyMMdd=/^[12]\d{3}(0\d|1[0-2])([0-2]\d|3[01])$/;

document.write("20091021",":", regyyyyMMdd.test("20091021"),"<br />");
document.write("20093121",":", regyyyyMMdd.test("20093121"),"<br />");
document.write("20091321",":", regyyyyMMdd.test("20091321"),"<br />");
document.write("20090331",":", regyyyyMMdd.test("20090331"),"<br />");
document.write("20090332",":", regyyyyMMdd.test("20090332"),"<br />");

这样的好像判断不出来闰月吧。。。

#8



  <script type="text/javascript">
  <!--
    var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))()(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9][0-9])?[0-9]{2})()(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1[0-9]|2[0-8]))))$/;
    alert(reg.test("20080203"))
    alert(reg.test("2009/02/28")) // 28天为true
    alert(reg.test("20090229")) // 29为false
  //-->
  </script>

#9


引用 3 楼 dp_derek 的回复:
哦。谢谢。不过有类似的函数吗


配合格式检查可以做到

L@_@K

function validateDateStr(yyyyMMdd)
{
// yyyy: 1000-2999
// MM: 01-12
// dd: 01-31
var reg = /^([12]\d{3})(0\d|1[0-2])([0-2]\d|3[01])$/;

if (reg.test(yyyyMMdd))
{
var arr = reg.exec(yyyyMMdd);
var d = new Date(parseInt(arr[1]), parseInt(arr[2])-1, parseInt(arr[3]));

return (d.getMonth()+1)==parseInt(arr[2]) && d.getDate()==parseInt(arr[3]);
}
else
return false;
}

document.write("20091021", ": ", validateDateStr("20091021"), "<br />");
document.write("20093121", ": ", validateDateStr("20093121"), "<br />");
document.write("20091321", ": ", validateDateStr("20091321"), "<br />");
document.write("20090331", ": ", validateDateStr("20090331"), "<br />");
document.write("20090332", ": ", validateDateStr("20090332"), "<br />");
document.write("20090229", ": ", validateDateStr("20090229"), "<br />");
document.write("20080229", ": ", validateDateStr("20080229"), "<br />");
document.write("20080230", ": ", validateDateStr("20080230"), "<br />");

#10


引用 8 楼 click_me 的回复:
JScript code<script type="text/javascript"><!--var reg=/^(?:(?:(?:(?:(?:1[6-9]|[2-9][0-9])?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))()(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-¡­

高手。结贴

#11


引用 9 楼 yixianggao 的回复:
引用 3 楼 dp_derek 的回复:哦。谢谢。不过有类似的函数吗

配合格式检查可以做到

L@_@K

JScript codefunction validateDateStr(yyyyMMdd)
{// yyyy: 1000-2999// MM: 01-12// dd: 01-31var reg=/^([12]\d{3})(0\d|1[0-2])([0-2]\d|3[01])$/;if (reg.test(yyyyMMdd))
    {var arr= reg.exec(yyyyMMdd);var d=new Date(parseInt(arr[1]), parseInt(arr[2])-1, parseInt(arr[3]));return (d.getMonth()+1)==parseInt(arr[2])&& d.getDate()==parseInt(arr[3]);
    }elsereturnfalse;
}

document.write("20091021",":", validateDateStr("20091021"),"<br />");
document.write("20093121",":", validateDateStr("20093121"),"<br />");
document.write("20091321",":", validateDateStr("20091321"),"<br />");
document.write("20090331",":", validateDateStr("20090331"),"<br />");
document.write("20090332",":", validateDateStr("20090332"),"<br />");
document.write("20090229",":", validateDateStr("20090229"),"<br />");
document.write("20080229",":", validateDateStr("20080229"),"<br />");
document.write("20080230",":", validateDateStr("20080230"),"<br />");

同样感谢。

#12


把闰月也考虑进去?
楼主太强了,正则表达式不具有任何的数学计算功能。

#13


2楼真强!!!佩服佩服!!!

#14


该回复于2010-02-23 16:36:09被版主删除