【发布时间】:2014-05-11 09:49:06
【问题描述】:
我正在使用正则表达式验证模型:
class User < ActiveRecord::Base
EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
USER_REGEX = /[-\w]/i
validates :name, presence: true, length: { maximum: 16 }, format: { with: USER_REGEX }
validates :email, presence: true, uniqueness: true, format: { with: EMAIL_REGEX }
end
但是,:name 字段未正确验证。如果我进入“rails 控制台”并创建 User 类的新实例,我可以将 :name 设置为包含空格和 .valid 的字符串?仍然返回 true。如果我在 irb 中测试正则表达式,它不匹配任何空格。
演示:
$ rails c --sandbox
...
2.0.0-p451 :001 > u = User.new name: "hello world", email: "test@example.com"
2.0.0-p451 :002 > u.valid?
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'test@example.com' LIMIT 1
=> true
我在 Linux 上使用 Ruby 2.0.0-p451,rails 4.0.4。
【问题讨论】:
标签: ruby-on-rails ruby regex validation activerecord