Rails正则表达式不起作用,但Javascript正则表达式可以
Rails regex won't work, but Javascript regex does
我已经阅读了这个问题并相应地更改了我的 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
一些注意事项:
请参阅
SO
主题 1、2 和 3,其中包含有关如何在ruby
中匹配日期的说明。使用正则表达式在线服务 rubular.com 或 rubyxp.com 来验证
ruby
语言、嵌入式 irb 应用程序或调试 pry gem 的正则表达式匹配。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式