0

在我的 Rails 模型中,我有某种模板系统。我想确保编辑它的用户不会犯意外错误,所以我使用了一些简单的验证器。

他们可以使用##user_id##以后会被替换的标记。我想确保他们不会输入###user_id##包含太多 的类似内容#,因此字段中不必出现任何###(或####)。

class Template
  validates_format_of :text, :with => /##user_id##/, 
    :message => "##user_id## must be present"
  validates_format_of :text, :not_with => /###/, 
    :message => "Too many #"
end

不幸的是,没有:not_with选择......有没有机会使用:with-regex 来解决它,或者我应该采用单独的validate方法吗?

我尝试了一些消极的前瞻,但由于(大部分)有几个##而且只有一个###,它们总是匹配其中一个。

4

3 回答 3

4

使用:without选项:

validates_format_of :text, :without => /###/, :message => "Too many #"
于 2013-10-24T20:39:06.120 回答
1

那这个呢...

validates_format_of :text, :with => /(^|[^#])##user_id##($|[^#])/

编辑:我用我的正则表达式复制了 acheong87 的rubular示例。

于 2012-06-26T15:18:05.277 回答
0

你能做这样的事情吗?

    /^(.(?!###+user_id##|##user_id###+))*$/

这是一个现场演示:http ://rubular.com/r/SPwsyDlj0y 。

在(更多)英语中,它说,

一个字符串,其中没有字符后跟###+user_id##or ##user_id###+

于 2012-06-26T15:18:51.070 回答