【发布时间】:2014-12-24 17:53:52
【问题描述】:
我已阅读此问题并相应地更改了我的 Rails 模型代码: Regular expressions with validations in RoR 4
这是我在 Rails 中的日期时间的正则表达式:
/\A((19[7-9][0-9])|(2[0-9][0-9][0-9]))\/((0[1-9])|(1[0-2]))\/(([0-2][0-9])|(3[0-1]))\s(([0-1][0-9])|(2[0-4]))\:([0-5][0-9])\z/
下面的这个正则表达式可以在 javascript 中使用:
/^((19[7-9][0-9])|(2[0-9][0-9][0-9]))\/((0[1-9])|(1[0-2]))\/(([0-2][0-9])|(3[0-1]))\s(([0-1][0-9])|(2[0-4]))\:([0-5][0-9])$/
我正在尝试将日期时间字符串传递给他们两个,但我不明白为什么它总是失败。这是字符串:
2014/12/02 11:06
我认为我的模型代码可能会有所帮助:
validates :start, presence: true, format: { :with => /\A((19[7-9][0-9])|(2[0-9][0-9][0-9]))\/((0[1-9])|(1[0-2]))\/(([0-2][0-9])|(3[0-1]))\s(([0-1][0-9])|(2[0-4]))\:([0-5][0-9])\Z/, :message => "must be in this format: YYYY/MM/DD HH:MM" }
validates :finish, presence: true, format: { :with => /\A((19[7-9][0-9])|(2[0-9][0-9][0-9]))\/((0[1-9])|(1[0-2]))\/(([0-2][0-9])|(3[0-1]))\s(([0-1][0-9])|(2[0-4]))\:([0-5][0-9])\Z/, :message => "must be in this format: YYYY/MM/DD HH:MM" }
编辑:我知道问题出在哪里,但我仍然不知道如何解决它...
由于某种原因,当我提交表单时,日期 2014/12/24 16:19 被缩短为 2014。然后验证失败并引发错误。
谁能帮我解决这个问题?
【问题讨论】:
-
您的 ruby 正则表达式是正确的,并且与提供的字符串匹配
-
@August 我认为我的 text_fields 可能会在字符串末尾添加一个新行。我尝试在您提供的代码中添加换行符,但失败了。有没有办法在提交之前去掉换行符?
-
我认为 Rails 出于某种原因正在将我的输入减少到一年。不过我不知道为什么
-
我发现了问题:在验证之前,我的日期时间被缩短到一年(或我假设的第一个“/”之前的任何时间)。谁能告诉我为什么会发生这种情况以及如何解决它?
标签: javascript ruby-on-rails regex