2010-08-26 90 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

相關問題