Rails:验证字符串的最小和最大长度,但允许它为空

Posted

技术标签:

【中文标题】Rails:验证字符串的最小和最大长度,但允许它为空【英文标题】:Rails: Validating min and max length of a string but allowing it to be blank 【发布时间】:2011-05-25 10:06:46 【问题描述】:

我有一个要验证的字段。我希望该字段能够留空,但如果用户正在输入数据,我希望它采用某种格式。目前我在模型中使用以下验证,但这不允许用户将其留空:

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

我如何写这个来实现我的目标?

【问题讨论】:

【参考方案1】:

您也可以使用这种格式:

validates :foo, length: minimum: 5, maximum: 5, allow_blank: true

或者由于您的最小值和最大值相同,因此以下内容也可以使用:

validates :foo, length: is: 5, allow_blank: true

【讨论】:

【参考方案2】:

我认为它可能需要类似:

validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true

更多例子:ActiveRecord::Validations::ClassMethods

【讨论】:

对于特定尺寸,您可以使用长度约束:is【参考方案3】:

或者更简洁(使用新的哈希语法),来自validates documentation:

validates :foo, length: 5..5, allow_blank: true

上限可能应该代表更有意义的东西,例如“in: 5..20”,但只是回答问题。

【讨论】:

在不认为in 将与字符串一起使用,似乎只是数字 这应该可以代替 validates :foo, length: 2..5, allow_blank: true 但在 OP 的情况下 `length: is: 5` 【参考方案4】:

来自validates_length_of documentation:

validates_length_of :phone, :in => 7..32, :allow_blank => true

:allow_blank - 属性可能为空;跳过验证。

【讨论】:

【参考方案5】:

每个 validates_* 都接受 :if 或 :unless 选项

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

其中 validate_foo_condition 是返回 true 或 false 的方法

你也可以传递一个 Proc 对象:

validates_length_of :foo, :maximum => 5, :unless => Proc.new |object| object.foo.blank?

【讨论】:

【参考方案6】:
validates_length_of :reason, minimum: 3, maximum: 30

rspec 同样是

it  should validate_length_of(:reason).is_at_least(3).is_at_most(30) 

【讨论】:

【参考方案7】:

怎么样: validates_length_of :foo, is: 3, allow_blank: true

【讨论】:

【参考方案8】:

添加你的模型:

validates :color, length:  is: 7 

颜色是一个字符串:

t.string :color, null: false, default: '#0093FF', limit: 7

【讨论】:

【参考方案9】:

在您的模型中,例如

def validate
  errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end

【讨论】:

以上是关于Rails:验证字符串的最小和最大长度,但允许它为空的主要内容,如果未能解决你的问题,请参考以下文章

红宝石正则表达式。限制最小和最大字符串长度

如何在仍然运行 HTML 验证(最小长度、最大长度、模式...)的同时使用 JavaScript 提交表单

创建电子邮件验证码时限制长度是不是不好? [复制]

如何在Rails 5中更改设计中的验证错误消息

求一段JS的函数代码....

java 验证密码的正则表达式,要求同时有数字和字母,长度最小6,最大16,无限感激啊!