前提・実現したいこと
Railsのバリデーションで時間形式の入力チェックを実現したいです。
フォーマットで入力チェックを考えておりますが、他に方法がございましたら、お教えいただければと思います。
入力形式は、10:10:10
と言った文字列を想定しております。
発生している問題・エラーメッセージ
root@5c04d78fc14e:/app# rails db:seed rails aborted! ActiveRecord::RecordInvalid: バリデーションに失敗しました: Startは不正な値です /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/validations.rb:81:in `raise_validation_error' /usr/local/bundle/gems/activerecord-6.0.2.1/lib/active_record/validations.rb:53:in `save!'
該当のソースコード
以下調査途中です。コメントアウトの部分に試した正規表現を記載しております。
ruby
1 # Validate 2 # NG 理想としたい、正規表現 3 # VALID_TIME_REGEX = /\A(0[0-9]{1}|1{1}[0-9]{1}|2{1}[0-3]{1}):(0[0-9]{1}|[1-5]{1}[0-9]{1}):(0[0-9]{1}|[1-5]{1}[0-9]{1})\z/i 4 5 # OK 時間部分の数字+:(コロン) 6 # VALID_TIME_REGEX = /(0[0-9]{1}|1{1}[0-9]{1}|2{1}[0-3]{1}):/i 7 8 # NG 前方一致+時間部分の数字+:(コロン) 9 # VALID_TIME_REGEX = /\A(0[0-9]{1}|1{1}[0-9]{1}|2{1}[0-3]{1}):/i 10 11 # OK 前方一致+時間部分の数字 12 # VALID_TIME_REGEX = /\A(0[0-9]{1}|1{1}[0-9]{1}|2{1}[0-3]{1})/i 13 14 validates :start, format: { with: VALID_TIME_REGEX } 15
SEED(入力値)で設定しているのは、"10:10:10"
です。
試したこと
こちらのサイトで、理想としたい、正規表現が正しいことは確認して"10:10:10"
がマッチするのは確認が取れました。
https://rubular.com/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。