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

AnA*_*ice 1 ruby-on-rails ruby-on-rails-3

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

支持的:

  • AZ,az,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]/ }
Run Code Online (Sandbox Code Playgroud)

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

mea*_*gar 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
Run Code Online (Sandbox Code Playgroud)

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

validates :uuid,
    :length => { :within => 5..500 },
    :format => { :with => /^[a-z0-9][-a-z0-9]*[a-z0-9]$/i }
Run Code Online (Sandbox Code Playgroud)