2012-11-21 4 views
5

Ich versuche eine Möglichkeit zu finden, eine Zeichenfolge zu normalisieren, um sie als Dateiname zu übergeben.Standardisieren Sie eine Zeichenfolge für Dateiname, entfernen Sie Akzente und spezielle Zeichen

Ich habe dies so weit:

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

Aber erstes Problem: das - Zeichen. Ich denke, es gibt mehr Probleme mit dieser Methode.

Ich kontrolliere nicht den Namen, der Name String kann Akzente, Leerzeichen und Sonderzeichen haben. Ich möchte alle entfernen, ersetzen Sie die Akzente mit dem entsprechenden Buchstaben ('é' => 'e') und ersetzen Sie den Rest durch das Zeichen '_'.

Die Namen sind wie:

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

ich sie wie ein Dateiname sein wollen ohne Leerzeichen/Sonderzeichen:

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

Danke für die Hilfe :)

Antwort

9

Werfen Sie einen Blick auf ActiveSupport::Inflector.transliterate, ist es sehr nützlich, diese Art von Zeichen Probleme der Handhabung. Lesen Sie dort:

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

große ... dank – harsh4u

+2

funktioniert nicht mit Namen wie "xxx l'amour": ActiveSupport::Inflector

Dann Sie so etwas wie tun könnte. Fix: ist das Hinzufügen von gsub (/ '/,' ') – Alain

Verwandte Themen