我正在构建一个应用程序,用户可以为其个人资料创建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]+/
给出了相同的结果。任何人都对可能发生的事情有任何想法?
答案 0 :(得分:1)
您的正则表达式未锚定,因此只要模式包含至少一个字母a-z,模式就会匹配。其他任何有效的。将\A
和\z
添加到开头和结尾,以防止匹配较大输入中的任何子字符串。
:with => /\A[a-z]+\z/