Ruby:如何检查字符串是否有效?

Shp*_*ord 6 ruby string time ruby-on-rails

我从我无法控制的Feed中提取数据,我需要验证我给出的字符串是否是有效时间.

大多数时候我正确地发送了类似"2:35"或"15:41"的东西,但有时候它就像"AM"或"PM"(并且没有数字)...所以我最终只需要忽略那些.

那么,我该如何验证数据是否是有效时间?

Mla*_*vić 7

你还没有确切地说明你认为有效的时间(例如你是否应该接受可选的秒数),所以这里有一个猜测:

data =~ /^([01]?[0-9]|2[0-3])\:[0-5][0-9]$/
Run Code Online (Sandbox Code Playgroud)

  • 一切都取决于你在接受价值观时的严谨程度.我认为最大限度(只有可选的东西是小时数的前导零).问题没有具体说明.除此之外,在论证方面,"Time.parse"似乎真的很自由.试试,例如:`Time.parse'10'`和`Time.parse'asd'`.抛出异常(至少在1.9.1中).我真的不会依赖它. (3认同)

Veg*_*ger 7

您可以使用Time.parse()并检查无效时间的ArgumentError异常.

额外的好处是,如果有效,您还可以使用可用的格式进行操作!

  • 不要使用解析来验证!Time.parse('2:34- ^ 5')#=> 2012-08-14 02:34:00 -0400 (6认同)
  • 使用解析进行验证可能会导致一些错过的无效时间,例如:`Time.parse('27:45 PM')`=> 2012-12-04 15:45:00 -0500 (5认同)