【问题标题】:How do I validate if my model attribute does NOT match a regex?如何验证我的模型属性是否与正则表达式不匹配?
【发布时间】:2017-04-11 20:11:45
【问题描述】:

我正在使用 Rails 5。如果属性与模式不匹配,我如何为我的模型创建一个验证规则,该验证集是有效的?我有这个

validates_numericality_of :my_str, :with => /\d:\d/, :allow_blank = true

但我真正想说的是验证字符串是否与正则表达式不匹配。

【问题讨论】:

    标签: validation model ruby-on-rails-5


    【解决方案1】:

    我的理解是,如果验证不是数字,您希望通过验证,那么为什么不更改正则表达式以匹配数字以外的任何内容:

    /^(?!\d)/
    

    使用您的代码将是

    validates_format_of :my_str, :with => /^(?!\d)/, :allow_blank = true
    

    或者:
    正如documentation 所说的那样

    或者,您可以要求指定的属性不 使用 :without 选项匹配正则表达式。

    所以:

    validates_format_of :my_str,format: { without => /\d:\d/},  allow_blank = true
    

    validates_format_of 通过测试属性值是否匹配给定的正则表达式来验证属性值,该正则表达式使用:with 或:without 选项指定

    【讨论】:

    • Rails 5 (Ruby 2.4) 中是否存在“:without”?我创建了“验证 :my_num, numericity: { greater_than: 0, :only_integer => true }, :allow_blank => true, :without => /\d:\d/”,但出现错误,“/Users/davea /.rvm/gems/ruby-2.4.0/gems/activemodel-5.0.2/lib/active_model/validations/validates.rb:120:in `rescue in block in validates': Unknown validator: 'WithoutValidator' (ArgumentError) "
    • 使用validates_format_of 代替validates_numericality_of,后者有:without 选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2011-04-12
    • 2019-10-08
    相关资源
    最近更新 更多