Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于正则表达式的Rails自定义验证?_Ruby On Rails_Ruby_Regex_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 基于正则表达式的Rails自定义验证?

Ruby on rails 基于正则表达式的Rails自定义验证?,ruby-on-rails,ruby,regex,ruby-on-rails-3,Ruby On Rails,Ruby,Regex,Ruby On Rails 3,我在routes.rb中使用了以下正则表达式,用于/在此处键入内容 # A-Z, a-z, 0-9, _ in the middle but never starting or ending in a _ # At least 5, no more than 500 characters 在路线中,这一点非常有效: match ':uuid' => 'room#show', :constraints => { :uuid => /[A-Za-z\d]([-\w]{,498}[

我在routes.rb中使用了以下正则表达式,用于/在此处键入内容

# A-Z, a-z, 0-9, _ in the middle but never starting or ending in a _
# At least 5, no more than 500 characters
在路线中,这一点非常有效:

match ':uuid' => 'room#show', :constraints => { :uuid => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/ }
我想把它也作为一个验证,这样就不会创建无效记录。因此,我在room.rb中添加了以下内容:

validates_format_of :uuid, :with => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/i, :message => "Invalid! Alphanumerics only."
但这验证了的格式不起作用,它不是添加错误,而是允许记录保存

你知道怎么了吗


谢谢你用这样的东西

validates :uuid, :format => {:with => /[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?/i},
                 :message => "your message"

有关验证目的的更多检查,请记住添加字符串标记的开头和结尾
\A
\Z

validates_format_of :uuid, :with => /\A[A-Za-z\d]([-\w]{,498}[A-Za-z\d])?\Z/i

否则,您的正则表达式将很乐意匹配任何至少包含一个字母或数字的字符串。出于某种原因,Rails隐式地在路由中添加了边界。(可能是因为它将正则表达式嵌入到一个更大的正则表达式中,以匹配整个URL,并显式检查
/
和URL的结尾。)

注意,在正则表达式的结尾使用
\Z
可以使用尾随换行符。您可能需要
\z
。(很抱歉评论了一个老问题。)这对我来说很好,但是在本例中,右括号的位置不正确。它应该是:
validates:uuid,:format=>{:with=>/…/i,:message=>“…”}
validates :name, format: { with: /\A[a-zA-Z]+\z/,
message: "Only letters are allowed" }