检查字符串是否包含'http://'和'.jpg'

Dee*_*kor 3 ruby ruby-on-rails-3

我是Ruby和Rails的新手,请原谅我,如果这是一个简单的问题.我试图检查用户何时在我的表单中传入IMG网址,这是一个有效的网址.这是我的代码:

if params[:url].include? 'http://' && (params[:url].include? '.jpg' || params[:url].include? '.png')
Run Code Online (Sandbox Code Playgroud)

这会返回并出错.这甚至是最好的方式吗?我该怎么办?谢谢.

Phr*_*ogz 15

if my_str =~ %r{\Ahttps?://.+\.(?:jpe?g|png)\z}i
Run Code Online (Sandbox Code Playgroud)

正则表达式解释说:

  • %r{...}- 正则表达式文字相似/.../,但允许/在没有转义的情况下在里面使用
  • \A- 字符串的开头(^只是行的开头)
  • http - 文字文字
  • s? - 可选地后跟"s"(允许https://)
  • ://- 文字文字(以防止类似的事情http-whee.jpg)
  • .+ - 一个或多个字符(不是换行符)
  • \. - 字面时间(确保这是我们正在查看的扩展)
  • (?:aaa|bbb)- 允许aaabbb在此处,但不捕获结果
  • jpe?g - "jpg"或"jpeg"
  • png - 文字文字
  • \z- 字符串的结尾($只是行的结尾)
  • i- 使匹配不区分大小写(允许.JPG以及.jpg)

但是,您可能只能使用这个(更易读)版本:

allowed_extensions = %w[.jpg .jpeg .png]
if my_str.start_with?('http://') &&
   allowed_extensions.any?{ |ext| my_str.end_with?(ext) }
Run Code Online (Sandbox Code Playgroud)