あなたの正規表現は次のようになります。
/[0-9]{2}:[0-9]{2}/
またはここ
/\d\d:\d\d/
はいくつかのテストです:私はあなたの指定した溶液で働いていたこの時点まで
'00:00'[/[0-9]{2}:[0-9]{2}/] # => "00:00"
'12:00'[/\d\d:\d\d/] # => "12:00"
'11:59'[/[0-9]{2}:[0-9]{2}/] # => "11:59"
'23:59'[/\d\d:\d\d/] # => "23:59"
':'[/[0-9]{2}:[0-9]{2}/] # => nil
':0'[/[0-9]{2}:[0-9]{2}/] # => nil
'0:0'[/[0-9]{2}:[0-9]{2}/] # => nil
'000:0'[/[0-9]{2}:[0-9]{2}/] # => nil
'0:000'[/[0-9]{2}:[0-9]{2}/] # => nil
が、ここですそれは分解する:
# BUG?
'1:00'[/[0-9]{2}:[0-9]{2}/] # => nil
# Fix?
'1:00'[/[0-9]{1,2}:[0-9]{2}/] # => "1:00"
# *** BUG ***
'99:99'[/[0-9]{2}:[0-9]{2}/] # => "99:99"
「99:99」が使用できることに注意してください。
範囲を調べるために正規表現を使用しようとすると、時間値のようなものを扱うときに実際には非常に有効ではありません。それはできますが、正規表現は醜いものになります。
ここでは、ソリューションの始まりです。 validates_timeliness
など
timeval = '00:00'[/[0-9]{2}:[0-9]{2}/]
(timeval.split(':').map(&:to_i) <=> [11,59]) <= 0 # => true
timeval = '1:00'[/[0-9]{1,2}:[0-9]{2}/]
(timeval.split(':').map(&:to_i) <=> [11,59]) <= 0 # => true
timeval = '1:00'[/[0-9]{1,2}:[0-9]{2}/]
(timeval.split(':').map(&:to_i) <=> [11,59]) <= 0 # => true
timeval = '0:99'[/[0-9]{1,2}:[0-9]{2}/]
(timeval.split(':').map(&:to_i) <=> [11,59]) <= 0 # => true
timeval = '99:99'[/[0-9]{1,2}:[0-9]{2}/]
(timeval.split(':').map(&:to_i) <=> [11,59]) <= 0 # => false
代わりに、あなたには、いくつかの<select>
popups for the valuesを使用してに見たいと思うかもしれません、または時間入力用に設計されたjQueryプラグイン、または何か:適切な範囲のテストを仕上げすることは読者の課題として残されていますvalidates_date_time
。私はまたtime_select with 12 hour time and Time Zone in Ruby on Railsを見つけました。 search Stack Overflowでも可能です。
が、それは、複数の手順を実行します。それが価値があるかどうかは、次の質問です。 –
いや...フィールドのタイプを変更したくはありません。データをフォーマットする方法を探しているだけです。 – bgadoci
フィールドタイプを変更すると...既存のデータをマップできますか? – bgadoci