2010-08-26 7 views
3

suite à un tutoriel de sécurité RoR (here), je l'ai écrit quelque chose le long des lignes dequ'est-ce que le regex vide correspond à ruby?

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

l'idée est que dans le cas de base, cela ne devrait pas correspondre à quelque chose, et revenir nil. le problème est que ce n'est pas le cas. J'ai travaillé pour le moment en utilisant une chaîne absurde, mais j'aimerais connaître la réponse.

Répondre

5

L'expression régulière vide correspond à chaque chaîne.

Exemples d'expressions régulières qui toujours ne correspondent pas:

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

/somethingthatwillmontrer/fonctionne de la même façon et est un peu plus lisible :) – kolosy

+1

@kolosy ... il correspondrait à la chaîne de texte 'somethingthatwillnevermatch': D - pas que cela soit susceptible d'être quelque chose que vous testez ... mais c'est possible! : D –

1

Il est destiné à ne pas modifier le comportement du contrôleur de quelque manière que , comme // correspondra à chaque chaîne. L'idée est que @@private est destiné à être défini dans le contrôleur pour correspondre aux choses que vous voulez être privé. Ainsi, ce code est destiné à ne rien faire, mais lorsqu'il est combiné avec @@private = /.../ dans le contrôleur, vous donne un bon mécanisme de confidentialité.

+0

il peut être destiné à ne rien faire, mais si utilisé textuellement dans le contrôleur d'application, provoque une boucle de redirection lorsqu'il n'y a pas un utilisateur connecté. l'expression rationnelle correspond à tout, vous donne les instructions pour vous connecter, la regex correspond à tous les éléments, vous donne les instructions pour vous connecter, etc. – kolosy

Questions connexes