我想检查iso8601格式中输入的ruby日期,例如 start_date =“2011/05/05”应匹配格式 2011-05-05T00: 00:00-04:00 ,相应地返回错误。 我们应该在这里使用正则表达式还是存在任何方法?
答案 0 :(得分:8)
听起来像你想要的Time.iso8601
:
require 'time'
iso = Time.iso8601(start_date)
有关详细信息,请参阅this blog post。
编辑:这是一个简短但完整的测试程序,有效:
require 'time'
text = "2011-05-05T00:00:00-04:00"
parsed = Time.iso8601(text)
puts parsed
输出:
Thu May 05 04:00:00 UTC 2011
答案 1 :(得分:4)
对于正则表达式验证(使用可选的微秒和时区),请使用:
^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$
测试: http://rubular.com/r/qFFrhzvdsS
当性能很重要时,不建议在脚本中使用!