Rails正则表达式不起作用,但Javascript正则表达式可以

Rails regex won't work, but Javascript regex does

本文关键字:正则表达式 Javascript 不起作用 Rails      更新时间:2023-09-26

我已经阅读了这个问题并相应地更改了我的 rails 模型代码:在 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 部分的regexp是正确的,它与提供的字符串匹配:

re = /'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/
'2014/12/02 11:06' =~ re # => 0 

一些注意事项

  1. 请参阅SO主题 1、2 和 3,其中包含有关如何在ruby中匹配日期的说明。

  2. 使用正则表达式在线服务 rubular.com 或 rubyxp.com 来验证ruby语言、嵌入式 irb 应用程序或调试 pry gem 的正则表达式匹配。