简单的rails格式验证不会触发

时间:2012-02-17 17:41:09

标签: ruby-on-rails ruby regex validation

我正在构建一个应用程序,用户可以为其个人资料创建url slugs。为了确保slug有效,我在slugs的User模型中添加了一个验证:

  validates :slug, :uniqueness => true, :format => { :with => /[a-z]+/ }, :allow_nil => true, :allow_blank => true

然而,无论slug字符串是什么格式,验证似乎都会通过,例如:

u.slug = 'jlskdf .jc oi/slkdjfie\*asdf&(*&*ss%&'
=> "jlskdf .jc oi/slkdjfie\\*asdf&(*&*ss%&"
u.save
=> true

显然我将正则表达式改为什么并不重要,一切都过去了。我也试过这种格式:

validates_format_of :slug, :with => /[a-z]+/

给出了相同的结果。任何人都对可能发生的事情有任何想法?

1 个答案:

答案 0 :(得分:1)

您的正则表达式未锚定,因此只要模式包含至少一个字母a-z,模式就会匹配。其他任何有效的。将\A\z添加到开头和结尾,以防止匹配较大输入中的任何子字符串。

:with => /\A[a-z]+\z/