Ruby 3中如何优雅验证日期时间字符串格式?
Ruby 3中验证日期时间字符串格式的简洁方法
Ruby 3本身没有专门用来直接校验日期时间字符串格式的内置方法,但可以通过尝试解析+捕获异常的方式实现验证——解析成功则格式合法,抛出异常则格式错误。
针对标准ISO 8601格式(如示例中的2020-02-25T02:57:08.264Z)
可以直接使用Time.iso8601方法,这个方法专门处理ISO 8601标准的日期时间字符串:
def valid_iso8601_datetime?(str) Time.iso8601(str) true rescue ArgumentError false end # 测试用例 datetime = "2020-02-25T02:57:08.264Z" puts valid_iso8601_datetime?(datetime) # 输出 true puts valid_iso8601_datetime?("2020/02/25") # 输出 false
针对自定义格式
如果需要校验非标准的自定义日期时间格式,可以借助DateTime.strptime指定匹配格式,同样通过异常捕获判断:
require 'date' def valid_custom_datetime?(str) # 格式字符串需与目标格式严格对应 DateTime.strptime(str, "%Y-%m-%dT%H:%M:%S.%LZ") true rescue ArgumentError false end
Ruby 3.2+的额外选项
Ruby 3.2及以上版本新增了Time#iso8601?方法,可直接判断Time实例是否符合ISO 8601格式。若需要更严谨的验证,可结合解析和这个方法:
def valid_iso8601_datetime?(str) time = Time.iso8601(str) time.iso8601? rescue ArgumentError false end
内容的提问来源于stack exchange,提问作者srisha mo
相关产品推荐
相关产品推荐

