2010-08-26 46 views
3

下一个RoR的安全教程(here),我写的东西沿着空的正则表达式匹配红宝石是什么?

@@private_re = // 
def secure? 
    action_name =~ @@private_re 
end 

行的想法是,在基本情况下,这应该不匹配任何,返回nil。问题是它没有。我通过使用一个无意义的字符串来解决问题,但我想知道答案。

回答

5

空的正则表达式成功匹配每个字符串。这将永远失败的正则表达式的

例子匹配:

  • /(?=a)b/
  • /\Zx\A/
  • /[^\s\S]/
+0

/somethingthatwillnevermatch /作品相同,并且更具可读性:) – kolosy 2010-08-26 17:50:20

+1

@kolosy ...它会匹配文本字符串'somethingthatwillnevermatch':D - 不是那可能是您正在测试的内容...但它可能! :D – 2011-10-10 18:00:42

1

它的目的是不以任何方式更改控制器的行为,因为//会匹配每个字符串。

想法是,@@private是为了匹配你想要保密的东西而设置的。因此,该代码意味着什么都不做,但是当与控制器中的 @@private = /.../结合使用时,会为您提供一个很好的隐私机制。

+0

它可能意味着什么都不做,但如果在应用程序控制器中逐字使用,则在没有登录用户时会导致重定向循环。正则表达式匹配所有内容,踢你登录,正则表达式匹配everythign,踢你登录等。 – kolosy 2010-08-26 17:52:00