1

我需要一个正则表达式来匹配以下内容 -

mm/dd/yyyy

以下日期条目应通过验证:

  • 2012 年 5 月 3 日
  • 2012 年 5 月 3 日
  • 2012 年 5 月 3 日
  • 2012 年 5 月 3 日

另外,在验证上述之后regex,将上述日期转换stringDate对象的最佳方法是什么?

4

4 回答 4

1

您应该使用 split、parseInt 和Date 构造函数一次性完成检查和解析:

function toDate(s) {
  var t = s.split('/');
  try {
     if (t.length!=3) return null;
     var d = parseInt(t[1],10);
     var m = parseInt(t[0],10);
     var y = parseInt(t[2],10);
     if (d>0 && d<32 && m>0 && m<13) return new Date(y, m-1, d);
  } catch (e){}
}

var date = toDate(somestring);
if (date) // ok
else // not ok

演示:

01/22/2012 ==> Sun Jan 22 2012 00:00:00 GMT+0100 (CET)
07/5/1972 ==> Wed Jul 05 1972 00:00:00 GMT+0100 (CEST)
999/99/1972 ==> invalid

作为本页的其他答案,这不会在 2 月 31 日窒息。这就是为什么出于所有严肃的目的,您应该改用像Datejs这样的库。

于 2012-10-17T11:33:36.187 回答
0

这个应该这样做:

((?:[0]?[1-9]|[1][012])[-:\\/.](?:(?:[0-2]?\\d{1})|(?:[3][01]{1}))[-:\\/.](?:(?:[1]{1}\\d{1}\\d{1}\\d{1})|(?:[2]{1}\\d{3})))(?![\\d])

(取自 txt2re.com)

您还应该看看这个链接

于 2012-10-17T11:32:27.823 回答
0
"/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/"

链接: Javascript 日期正则表达式 DD/MM/YYYY

于 2012-10-17T11:36:39.650 回答
0
var dateStr = '01/01/1901',
    dateObj = null,
    dateReg = /^(?:0[1-9]|1[012]|[1-9])\/(?:[012][1-9]|3[01]|[1-9])\/(?:19|20)\d\d$/;
    //             01 to 12 or 1 to 9   /    01 to 31  or  1 to 9   /  1900 to 2099

if( dateStr.match( dateReg ) ){
    dateObj = new Date( dateStr ); // this will be in the local timezone
}
于 2012-10-17T11:41:43.167 回答