19

我想验证我的用户的用户名没有空白/空格。是否有内置的验证可以做到这一点?或者最好的方法是什么。似乎这将是一个非常普遍的要求。

4

5 回答 5

63

我会尝试格式验证器

validates :username, format: { with: /\A[a-zA-Z0-9]+\Z/ }

大多数时候,当您不想在用户名中使用空格时,您也不需要其他字符。

或者当您真的只需要检查空格时,请without改用:

validates :username, format: { without: /\s/ }

完整文档:http ://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method-i-validates_format_of (validates ... format: {}与 相同validates_format_of ...

于 2013-08-16T20:54:46.367 回答
6

我相信您将不得不创建一个自定义验证器:

validate :check_empty_space

def check_empty_space
  if self.attribute.match(/\s+/)
    errors.add(:attribute, "No empty spaces please :(")
  end
end
于 2013-08-16T20:04:03.633 回答
1

在您的用户模型中添加验证。validates :username, format: { without: /\s/ } 将为您的用户删除空白/空格。您甚至可以添加一条消息,提醒用户他们的用户名包含空格。

class User < ActiveRecord::Base

 validates :username, format: { without: /\s/, message: "must contain no spaces" }

end
于 2016-09-26T20:12:38.967 回答
1

您可以使用before_validation回调来去除空格

class User
  before_validation :strip_blanks

  protected

  def strip_blanks
    self.username = self.username.strip
  end
end
于 2017-07-05T08:48:27.670 回答
-1

MurifoX的答案更好,但考虑到它是一个常见的要求,我认为这是更常用的:

验证:存在

class User < ActiveRecord::Base
  validates :name, presence: true
end
于 2013-08-16T20:08:48.700 回答