2012-11-21 38 views
5

Tôi đang cố gắng tìm cách để chuẩn hóa chuỗi để chuyển nó thành tên tệp.Chuẩn hóa chuỗi cho tên tệp, xóa dấu trọng âm và ký tự đặc biệt

Tôi có điều này cho đến nay:

my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').downcase.gsub(/[^a-z]/, '_') 

Nhưng trước tiên vấn đề: - nhân vật. Tôi đoán có nhiều vấn đề hơn với phương pháp này.

Tôi không kiểm soát tên, chuỗi tên có thể có dấu trọng âm, khoảng trắng và ký tự đặc biệt. Tôi muốn loại bỏ tất cả chúng, thay thế các dấu bằng chữ cái tương ứng ('é' => 'e') và thay thế phần còn lại bằng ký tự '_'.

Tên giống như:

  • "Prélèvements - Routine"
  • "Carnet de Santé"
  • ...

Tôi muốn họ thể giống như một filename không có dấu cách/ký tự đặc biệt:

  • "prelevements_routine"
  • "carnet_de_sante"
  • ...

Thanks for the help :)

Trả lời

9

Hãy xem ActiveSupport::Inflector.transliterate, nó rất hữu ích xử lý loại vấn đề chars. Đọc có: ActiveSupport::Inflector

Sau đó, bạn có thể làm một cái gì đó như:

ActiveSupport::Inflector.transliterate my_string.downcase.gsub(/\s/,"_") 
+0

lớn ... nhờ – harsh4u

+2

Không làm việc với những cái tên như "xxx l'amour". Khắc phục: là thêm gsub (/ '/,' ') – Alain

Các vấn đề liên quan