W modelu jest pole
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
Dla mnie wygląda to dość dziwnie. Zdaję sobie sprawę, że jest to wyrażenie regularne. Ale chciałbym:
- wiedzieć, co to dokładnie oznacza. Jest
%r{value}
równe/value/
? - móc go zastąpić zwykłym operatorem regex Ruby
/some regex/
lub~=
. Czy to możliwe?
ruby-on-rails
ruby
Alexandre
źródło
źródło
%r{}x
?/.../x
ignoruje również spacje. Nie jest to żadna specjalna właściwość%r
składni. Wszystkie opcje, które mogą nastąpić,/../
mogą również nastąpić%r{}
.\.
=> zawiera kropkę(gif|jpg|jpeg|png)
=> wtedy jedno z tych rozszerzeń$
=> koniec, nic po nimi
=> wielkość liter nie ma znaczeniaTo to samo, co pisanie
/\.(gif|jpg|jpeg|png)$/i
.źródło
%w[1 2 3]
jak[1, 2, 3]
na przykład.%w[1 2 3]
to nie to samo co[1, 2, 3]
. To jest to samo co['1', '2', '3']
.Dzięki
%r
, można używać żadnych ograniczników.Można użyć
%r{}
lub%r[]
czy%r!!
itd.Zaletą używania innych separatorów jest to, że nie musisz uciekać od
/
używanego w normalnym dosłownym wyrażeniu regularnym.źródło
to wyrażenie regularne pasuje do wszystkich ciągów kończących się na .gif, .jpg ...
możesz go zastąpić
/\.(gif|jpg|jpeg|png)$/i
źródło
Oznacza to, że
image_file_name
musi kończyć się ($
) kropką i jednym z gif, jpg, jpeg lub png.Tak,
%r{}
znaczy dokładnie to samo,//
ale%r{}
nie musisz uciekać/
.źródło