You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ruby检测PNG、JPG图片?DangerFile现有方案是否可行?

现有代码有效性说明

你写的代码在文件后缀全为小写的常规场景下可以正常生效,但存在几个边界问题,会导致检测结果不准确:

  • 大小写敏感导致漏判:正则默认区分大小写,遇到.PNG/.JPG/.Png这类大写、混合大小写的图片后缀时,会匹配失败,无法识别出这类图片文件。
  • 正则写法冗余:File.extname(file)返回值本身就是带点的后缀名(比如.png),正则里的.*前缀完全多余,没必要做全路径匹配。
  • 重复代码冗余:新增文件、修改文件的判断逻辑完全一致,拆成两个独立变量写会增加不必要的代码量。
  • 变量名存在拼写错误:你定义的变量名里formant为拼写失误,正确拼写应为format,如果后续代码有引用这个变量,要注意修正,避免出现未定义变量的报错。
优化实现方案

推荐用更直观、鲁棒性更强的写法,避开正则的冗余和大小写问题:

# 合并新增、修改文件列表,统一判断后缀,自动兼容大小写
has_target_pic = (git.added_files + git.modified_files).any? do |file|
  ['.png', '.jpg'].include? File.extname(file).downcase
end

如果后续需要扩展支持.jpeg等其他图片格式,只需要在判断数组里追加对应的后缀字符串即可。

如果你更习惯用正则匹配,可以参考下面的精简写法:

# i修饰符开启不区分大小写匹配,$限定匹配后缀结尾避免误判
pic_pattern = /\.(png|jpg)$/i
has_target_pic = (git.added_files + git.modified_files).any? { |file| file.match?(pic_pattern) }

这个写法直接匹配文件路径,不需要额外调用File.extname,用match?替代match也不会生成多余的匹配结果对象,执行效率更高。

内容的提问来源于stack exchange,提问作者Akniet Arysbayev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.16 16:15:41