Rails验证使用验证带正则表达式的字符串?

时间:2011-08-31 18:17:04

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

我有一个Message.uuid字段,我想添加验证,包括:

支持的:

  • A-Z,a-z,0-9
  • 在中间破折号,但从不以破折号开始或结束。
  • 至少5个,不超过500个字符

rails为这些规则编写模型验证的最佳方法是什么?

由于

更新:

  validates :uuid,
    :length => { :within => 5..500 },
    :format => { :with => /[A-Za-z\d][-A-Za-z\d]{3,498}[A-Za-z\d]/ }

使用有效的UUID,这是失败的

2 个答案:

答案 0 :(得分:6)

我将长度验证保留到validates_length_of验证程序,以便您获得更具体的错误消息。这将为您做两件事:简化与validates_format_of验证器一起使用的正则表达式,并在uuid太短/太长时提供长度特定的错误消息,而不是将长度错误显示为“格式”错误。

尝试以下方法:

validates_length_of :uuid, :within => 5..500
validates_format_of :uuid, :with => /^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i

您可以使用Rails 3将两个验证合并为一个validates

validates :uuid,
    :length => { :within => 5..500 },
    :format => { :with => /^[a-z0-9][-a-z0-9]*[a-z0-9]$/i }

答案 1 :(得分:2)

使用:

validates :uuid, :format => {:with => /my regexp/}

至于正则表达式,您已经在another question中提出了要求。