需要正则表达式模式以匹配日期和可选时间

Edw*_*ler 1 ruby regex datetime

我需要一个与日期和可选时间匹配的正则表达式模式.

日期应为m/d/yyyy格式的有效美国日期.时间应该是h:mm:ss am/pm24小时或24小时hh:mm:ss.

赛事:2011年9月1日| 2011年9月1日上午10:00 | 9/1/2011 10:00 AM | 2011年9月1日10:00:00

这个模式将在Ruby on Rails项目中使用,因此它应该是可以通过Ruby使用的格式.请参阅http://rubular.com/进行测试.

这是我现有的日期模式(可能是过度杀戮):

DATE_PATTERN = /^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}/
Run Code Online (Sandbox Code Playgroud)

Ale*_*tie 8

正则表达式对于这种工作来说太可怕了.如果您正在使用Ruby,我建议使用DateTime.strptime来解析数据并检查其有效性:

def validate_date(date_str)
  valid_formats = ["%m/%d/%Y", "%m/%d/%Y %I:%M %P"] 
  #see http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime for more

  valid_formats.each do |format|
    valid = Time.strptime(date_str, format) rescue false

    return true if valid
  end

  return false
end
Run Code Online (Sandbox Code Playgroud)