2014-11-05 26 views
1

我正在處理電子郵件以供上載,並且偶爾電子郵件中的嵌入式圖像通過或者沒有文件擴展名或擴展名包含字母,數字和特殊字符的隨機組合例如:[email protected])。如果任一實例到達,我想忽略它並繼續前進。我認爲我已經得到了沒有擴展的內容,但並不清楚如何最好地處理隨機字符,也不清楚如何編寫條件。這是我到目前爲止:RoR:處理空白和/或特殊字符

filename_extension = File.extname(filename) 

if filename_extension.blank? 
       puts "FILENAME EXT IS BLANK" 
    elsif filename_extension #NEED REGEX or something to handle Random? 
      puts "FILENAME EXT IS Random" 
      else #DO PROCESSING 

謝謝。

+0

所以具有特殊字符的任何東西都被認爲是隨機的? – Anthony 2014-11-05 15:11:03

+3

IMO最好的辦法是明確檢查「允許」擴展名,並假定非匹配項是隨機的,除非您知道「隨機」字符的確切格式。 – 2014-11-05 15:12:24

+0

爲什麼你不只是依靠MIME類型? – 2014-11-05 15:25:22

回答

0
known_extensions = %w[.csv .rb .rbw .html .htm .css] 
filenames = %w[1.txt 2.csv 3] 
filenames.each do |filename| 
    filename_extension = File.extname(filename) 

    if filename_extension.empty? 
    puts "FILENAME EXT IS BLANK" 
    elsif known_extensions.include? filename_extension 
    puts "FILENAME EXT IS Random" 
    else #DO PROCESSING 
    puts "Processing" 
    end 
end 

問題被標記ruby沒有任何表示的寶石,可能會給你的blank?方法。

'無效'擴展的想法是多種多樣的,當然與它意味着什麼是有效的文件名有關。例如,在大多數Unix文件系統中,文件名的唯一限制是文件名大小限制爲255字節,並且保留字符/null。實際上,我沒有在Unix中知道'擴展'的規範,因爲它們只是文件名的一部分,文件名中的句點是有效的,並不表示任何特殊的東西。 (除了以指示它應該是'隱藏'文件的時間段開始的文件名外)。在Windows系統上,它是較長的字符列表,其中一些是/ : < > ? \ | + , . ; = [ ]以及單個和雙重引號。在我的Commodore上,我認爲它是:,,=,在我的Amiga系統上我可以使用除",:/之外的任何東西。

所以我認爲'無效'擴展可能比'有效'擴展更容易匹配。如果您確實使用Rails,並且在Unix上託管,那麼您需要檢查一小部分內容,以確保有效的擴展(實際上是一個有效的文件名)。基於您的主機系統的無效擴展名,以及由於您對您的程序的有效擴展意味着什麼的任何限制。

+0

謝謝,但我該如何適應幾乎任何有效的擴展,而不是那些類似於:.gif @ 01CFA02B.47556390或它決定的東西?它可能會被封存爲.psd#1BC2DEF.2010等。謝謝。 – user464180 2014-11-05 20:10:46

+0

定義「有效的擴展名」。是第一個例子'.gif'或'.47556390'的擴展名。我注意到除了你以外的其他人改變了這個問題上的標籤,但是因爲它不是你,所以有一些潛力,你沒有使用Rails。你能否修改你的問題以確認你的標籤所做的更改? – vgoff 2014-11-06 02:55:26