在模型中有一个领域
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
对我来说看起来很奇怪。我知道这是一个正则表达式。但我想:
- 知道到底是什么意思。是
%r{value}
等于/value/
? - 能够用普通的Ruby regex运算符
/some regex/
或替换它~=
。可能吗?
在模型中有一个领域
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
对我来说看起来很奇怪。我知道这是一个正则表达式。但我想:
%r{value}
等于/value/
?/some regex/
或替换它~=
。可能吗?Answers:
%r{}
等效于/.../
符号,但是允许您在正则表达式中使用“ /”而不必对其进行转义:
%r{/home/user}
等效于:
/\/home\/user/
出于可读性考虑,这只是语法商品。
编辑:
请注意,您几乎可以使用任何非字母字符对代替“ {}”。这些变体也可以正常工作:
%r!/home/user!
%r'/home/user'
%r(/home/user)
编辑2:
请注意,该%r{}x
变体会忽略空格,从而使复杂的正则表达式更具可读性。来自GitHub的Ruby样式指南的示例:
regexp = %r{
start # some text
\s # white space char
(group) # first group
(?:alt1|alt2) # some alternation
end
}x
%r{}x
?/.../x
也忽略空格。这不是%r
语法的特殊属性。所有可以遵循的选项也可以/../
遵循%r{}
。
\.
=>包含一个点
(gif|jpg|jpeg|png)
=>然后,这些扩展名之一
$
=>结尾,后面没有任何内容
i
=>不区分大小写
它与写作相同/\.(gif|jpg|jpeg|png)$/i
。
%w[1 2 3]
与[1, 2, 3]
例如相同。
%w[1 2 3]
是不一样的[1, 2, 3]
。与相同['1', '2', '3']
。
此正则表达式匹配所有以.gif,.jpg ...结尾的字符串
你可以用
/\.(gif|jpg|jpeg|png)$/i