如何验证文本在Rails中不是空白

Nic*_*nto 26 validation chars ruby-on-rails-3

如果我做

  validates :body, :presence => true, :length => {:maximum => 30000, :message => ' is a bit long...'}
  validates :body, :length => {:minimum => 10, :message => ' is a bit short...'}
Run Code Online (Sandbox Code Playgroud)

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

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

Lis*_*nge 56

Rails添加了方便的方法,blank?如描述的检查错误,零和空字符串在这里.
Rails还添加了方便的验证器allow_blank: false.

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

validates :body, presence: true, allow_blank: false


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

如下面的答案中所述,allow_blank: false不需要,因为这是默认行为presence: true.

  • 设置`allow_blank:false`是多余的,因为`验证存在:true`已经做了你想要的.请注意底部的正确答案:http://stackoverflow.com/a/24832913/273715 (6认同)

Jac*_*all 27

presence: true根据http://guides.rubyonrails.org/active_record_validations.html#presence已经做到了

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


sum*_*mea 6

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

validates_format_of :body, :with => /\A[[:graph:]]\Z/i
Run Code Online (Sandbox Code Playgroud)

笔记:

  • validates_format_of 让你用regex验证
  • [[:graph:]]允许您检查字符串是否可打印字符(请参阅"字符类")