【问题标题】:How to validate text isn't blank in Rails如何验证文本在 Rails 中不是空白的
【发布时间】:2013-03-07 02:46:53
【问题描述】:

如果我这样做了

  validates :body, :presence => true, :length => {:maximum => 30000, :message => ' is a bit long...'}
  validates :body, :length => {:minimum => 10, :message => ' is a bit short...'}

我仍然有可能拥有仅包含 spaces/r/n 的文本 - 不可见的字符,虽然根据定义,文本不是空白的,但通过查看它是空白的

如何验证文本是否具有上面列出的最小和最大长度并且也是可见的(不是 10 个空格)

【问题讨论】:

  • 您总是可以尝试使用正则表达式来检查非单词、非数字和特殊字符,就像其他 question/answer 中建议的那样。
  • 也试试看这个question/answer

标签: ruby-on-rails-3 validation chars


【解决方案1】:

Rails 添加了方便的方法blank?,该方法检查错误、nil 和空字符串,如here 所述。
Rails 还添加了方便的验证器allow_blank: false

所以在你的情况下应该是:

validates :body, presence: true, allow_blank: false


编辑(上面的原始答案):

正如下面的答案所述,allow_blank: false 不是必需的,因为这是 presence: true 的默认行为。

【讨论】:

【解决方案2】:

presence: true 已经按照 http://guides.rubyonrails.org/active_record_validations.html#presence

此帮助器验证指定的属性不为空。它使用空白?方法来检查值是 nil 还是空字符串,即一个空字符串或由空格组成的字符串。

【讨论】:

【解决方案3】:

如果你尝试添加这样的东西会怎样:

validates_format_of :body, :with => /\A[[:graph:]]\Z/i

注意事项:

  • validates_format_of 让您使用正则表达式进行验证
  • [[:graph:]] 让您检查字符串中的可打印字符 (see "Character Classes")

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多