2014-12-24 33 views
0

我读过这个问题,并相应地改变了我的轨道模型代码: Regular expressions with validations in RoR 4Rails的正则表达式将无法正常工作,但正则表达式的Javascript确实

这是我在铁轨的正则表达式我的日期时间:

/\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。这然后验证失败并抛出错误。

任何人都可以帮我解决这个问题吗?

+0

你对红宝石的正则表达式是正确的,它提供的字符串 –

+0

工作对我来说比赛:http://rubular.com/r/FoRXQm9t4H – August

+0

@August我想我text_fields可能会增加一个新行字符串的结尾。我试着给你提供的代码添加一个换行符,但它失败了。有没有办法在提交之前删除换行符? – daraul

回答

1

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主题123与解释关于如何在ruby中匹配日期。

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

相关问题