The Ruby %r{ } expression

前端 未结 5 1155
暗喜
暗喜 2020-12-04 09:21

In a model there is a field

validates :image_file_name, :format => { :with => %r{\\.(gif|jpg|jpeg|png)$}i

It looks pretty odd for me.

5条回答
  •  孤街浪徒
    2020-12-04 09:40

    %r{} is equivalent to the /.../ notation, but allows you to have '/' in your regexp without having to escape them:

    %r{/home/user}
    

    is equivalent to:

    /\/home\/user/
    

    This is only a syntax commodity, for legibility.

    Edit:

    Note that you can use almost any non-alphabetic character pair instead of '{}'. These variants work just as well:

    %r!/home/user!
    %r'/home/user'
    %r(/home/user)
    

    Edit 2:

    Note that the %r{}x variant ignores whitespace, making complex regexps more readable. Example from GitHub's Ruby style guide:

    regexp = %r{
      start         # some text
      \s            # white space char
      (group)       # first group
      (?:alt1|alt2) # some alternation
      end
    }x
    

提交回复
热议问题