2015-10-17 2 views
0

Мне нужно регулярное выражение, которое будет соответствовать времени только в формате HH: MM, но не там, где указано время без HH, например: «4:00». Он должен принимать такие моменты, как 01:00, 23:59, 00:45, но не такие времена, как 4:00, 29:00 и т. Д. Я нашел регулярное выражение, которое принимает HH: MM и H: MM, но мне нужно, чтобы он соответствовал HH: только MM.ruby ​​Регулярное выражение для HH: MM

В принципе, такие моменты, как «4:00», не должны совпадать, раз как '04: 00 'должно быть!

Любая помощь была бы принята с благодарностью!

+2

это что вы ищете '[0-2] [0-4]: [0-5] [0-9]'. См. Эту демонстрацию https://regex101.com/r/wC3oQ3/1 –

+1

Это, однако, не принимается в любое время после 04:00, пока вы не достигнете 1 #: ##. Например, 05:00 не будет работать. – bkunzi01

ответ

1

Изменение @james ответ jelo4kul слегка, я думаю следующее правильное регулярное выражение, чтобы соответствовать вашим требованиям:

([0-1][0-9]|[2][0-3]):[0-5][0-9] 
+1

Отлично, спасибо! Я немного изменил его, чтобы запретить 24: ##, но именно то, что мне нужно в стороне от этого! Благодарю. – bkunzi01

+0

Да, спасибо, я исправил свой код. (извините за поздний комментарий, я думал, что прокомментировал ранее). –

0

Вы не должны использовать регулярное выражение:

require 'time' 

def get_time(str) 
    b = str.each_char.each_cons(5).find { |a| ['0', '1', '2'].include?(a.first) && 
    (DateTime.strptime(a.join, '%H:%M') rescue nil) } 
    b ? b.join : b 
end 

get_time "It's 6:07!" #=> nil 
get_time "It's 06:07!" #=> "06:07" 
get_time "It's 23:07!" #=> "23:07" 
get_time "It's 23:77!" #=> nil 
Смежные вопросы