ror,如何使正则表达式动态化?

时间:2011-09-09 19:03:04

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

鉴于此:

if (params[:to].to_s =~ (/^r\+.*@site.com$/)) == nil

如何将site.com动态化为:#{SITE_CONFIG['mail_host']}

我试过

if (params[:to].to_s =~ (/^r\+.*@#{SITE_CONFIG['mail_host']}$/)) == nil

哪个不行?想法?

2 个答案:

答案 0 :(得分:5)

在ruby中,您可以使用Regexp.new

从字符串表示创建正则表达式
if (params[:to].to_s =~ Regexp.new("^r\\+.*@#{Regexp.quote(SITE_CONFIG['mail_host'])}$")) == nil

答案 1 :(得分:4)

定义“不工作”,正则表达式可以包含插值字符串:

pry(main)> foo = "wat"
=> "wat"
pry(main)> "ohai wat kthxbai" =~ /#{foo}/
=> 5
pry(main)> foo = "nar"
=> "nar"
pry(main)> "ohai wat kthxbai" =~ /#{foo}/
=> nil
pry(main)> /#{foo}/
=> /nar/