检查字符串是否为SortableDateTimePattern格式

时间:2009-11-12 11:48:14

标签: regex string datetime format

有什么方法可以轻松检查字符串是否符合SortableDateTimePattern(“s”),还是需要编写正则表达式?

我有一个用户可以输入版权日期(作为字符串)的表单,这些是允许的格式:

年:YYYY(例如1997年)

年月:YYYY-MM(例如1997-07)

完成日期:YYYY-MM-DD(例如1997-07-16)

完成日期加上小时和分钟:YYYY-MM-DDThh:mmTZD(例如1997-07-16T19:20 + 01:00)

完成日期加上小时,分钟和秒:YYYY-MM-DDThh:mm:ssTZD(例如1997-07-16T19:20:30 + 01:00)

完成日期加上小时,分钟,秒和小数秒 YYYY-MM-DDThh:mm:ss.sTZD(例如1997-07-16T19:20:30.45 + 01:00)

我没有太多编写正则表达式的经验,所以如果有更简单的方法,我会非常感激!

2 个答案:

答案 0 :(得分:1)

未经过彻底测试,因此并非万无一失,但以下似乎有效:

var regex:RegExp = /(?<=\s|^)\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{2})?)?\+\d{2}:\d{2})?)?)?(?=\s|$)/g;
var test:String = "23 1997 1998-07 1995-07s 1937-04-16 " + 
                  "1970-0716 1993-07-16T19:20+01:01 1979-07-16T19:20+0100 " + 
                  "2997-07-16T19:20:30+01:08 3997-07-16T19:20:30.45+01:00";
var result:Object
while(result = regex.exec(test))
    trace(result[0]);

跟踪输出:

  

1997
  1998-07
  1937年4月16日
  1993-07-16T19:20 + 01:01
  2997-07-16T19:20:30 + 01:08
  3997-07-16T19:20:30.45 + 01:00

我在这里使用ActionScript,但正则表达式应该适用于大多数版本。在使用您的语言实现时,请注意第一个和最后一个/是分隔符,最后一个g代表全局。

答案 1 :(得分:0)

我将输入字段拆分为多个(一年,一月,一天等)。

您可以使用Javscript从一个字段前进到下一个字段(即一年四个字符在年份框中,将焦点移至月份)以便更顺畅地进入。

然后,您可以独立验证每个字段,最后构建完整的日期字符串。