格式验证不起作用。为什么?

时间:2011-03-08 20:31:16

标签: ruby-on-rails regex validation model

我有一点问题:

我的模型中有这个:

validates :title, :presence => true, :uniqueness => true, :format => /[A-Z][A-Za-z0-9\-_]*/i

这在我的控制器中:

  def create
    @page = Page.new params[:page]

    if verify_recaptcha(:model => @page) && @page.save
      redirect_to @page
    else
      render :action => :new
    end
  end

然而,某人创建了a page with a + in its title。怎么会发生这种情况? RegEx错了吗?我找不到问题。

2 个答案:

答案 0 :(得分:2)

尝试在正则表达式中放置开始和结束匹配器:

/^[A-Z][A-Za-z0-9\-_]*$/

否则,如果+位于开头或结尾,它仍会匹配。

答案 1 :(得分:0)

Nick几乎没有,而不是将:format传递给validates_presence_of,你需要添加另一个验证器:

validates_format_of :title, :with => /[A-Z][A-Za-z0-9\-_]*/i

另外,我会缩短那个正则表达式:

/[A-Z][\w\-_]*/i

您可以使用http://rubular.com检查您的正则表达式是否为您提供了预期的结果。