在我的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
- 正则表达式来解决它?还是应该使用单独的validate
方法?
我尝试了一些否定的预测,但由于(大多数情况下)有几个##
且只有一个###
,因此它们总是匹配其中一个。
答案 0 :(得分:4)
使用:without
选项:
validates_format_of :text, :without => /###/, :message => "Too many #"
答案 1 :(得分:1)
这个怎么样......
validates_format_of :text, :with => /(^|[^#])##user_id##($|[^#])/
编辑:我用正则表达式复制了acheong87的{{3}}示例。
答案 2 :(得分:0)
你能做这样的事吗?
/^(.(?!###+user_id##|##user_id###+))*$/
这是一个现场演示:http://rubular.com/r/SPwsyDlj0y。
在(更多)英语中,它说,
###+user_id##
或##user_id###+
后面没有字符的字符串。