Em um modelo, há um campo
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
Parece muito estranho para mim. Estou ciente de que esta é uma expressão regular. Mas eu gostaria:
- para saber exatamente o que isso significa. É
%r{value}
igual a/value/
? - poder substituí-lo pelo operador normal de regex Ruby
/some regex/
ou~=
. É possível?
ruby-on-rails
ruby
Alexandre
fonte
fonte
%r{}x
?/.../x
também ignora o espaço em branco. Esta não é uma propriedade especial da%r
sintaxe. Todas as opções que podem ser seguidas/../
também podem ser seguidas%r{}
.\.
=> contém um ponto(gif|jpg|jpeg|png)
=> então, qualquer uma dessas extensões$
=> o fim, nada depoisi
=> não faz distinção entre maiúsculas e minúsculasE é o mesmo que escrever
/\.(gif|jpg|jpeg|png)$/i
.fonte
%w[1 2 3]
é o mesmo que[1, 2, 3]
por exemplo.%w[1 2 3]
não é o mesmo que[1, 2, 3]
. É o mesmo que['1', '2', '3']
.Com
%r
, você pode usar qualquer delimitador.Você poderia usar
%r{}
ou%r[]
ou%r!!
etc.A vantagem de usar outros delímetros é que você não precisa escapar do
/
usado no literal regex normal.fonte
esse regexp corresponde a todas as strings que terminam com .gif, .jpg ...
você poderia substituí-lo por
fonte
Isso significa que
image_file_name
deve terminar ($
) com ponto e um de gif, jpg, jpeg ou png.Sim
%r{}
significa exatamente o mesmo que//
mas%r{}
você não precisa escapar/
.fonte