2012-11-21 16 views
5

Sto cercando di trovare un modo per normalizzare una stringa per passarla come nome file.Standardizzare una stringa per nome file, rimuovere accenti e caratteri speciali

ho questo finora:

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

Ma primo problema: il carattere -. Immagino ci siano più problemi con questo metodo.

non controllo il nome, la stringa nome può avere accenti, spazi bianchi e caratteri speciali. Voglio rimuoverli tutti, sostituire gli accenti con la lettera corrispondente ('é' => 'e') e sostituire il resto con il carattere '_'.

I nomi sono come:

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

li voglio essere come un nome di file senza spazio/caratteri speciali:

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

Grazie per l'aiuto :)

risposta

9

Date un'occhiata a ActiveSupport::Inflector.transliterate, è molto utile la gestione di questo tipo di problemi chars. Per saperne di là: ActiveSupport::Inflector

Poi, si potrebbe fare qualcosa di simile:

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

Grande ... grazie – harsh4u

+2

Non funziona con nomi come "xxx l'amour". Correzione: è aggiungere gsub (/ '/,' ') – Alain

Problemi correlati