upcase rails method lower downcase ruby-on-rails ruby string diacritics

ruby on rails - rails - Eliminando acentos/diacríticos de la cadena mientras conserva otros caracteres especiales(intenté mb_chars.normalize e iconv)



ruby string upcase (3)

Ya hay una pregunta muy similar . Una de las soluciones usa código como este:

string.mb_chars.normalize(:kd).gsub(/[^x00-/x7F]/n, '''').to_s

Lo cual funciona de maravilla, hasta que notes que también elimina espacios, puntos, guiones y quién sabe qué más.

No estoy muy seguro de cómo funciona el primer código, pero ¿podría hacerse para quitar solo los acentos? ¿O al menos recibir una lista de caracteres para preservar? Mi conocimiento de las expresiones regulares es pequeño, pero lo intenté (en vano):

/[^/-x00-/x7F]/n # So it would leave the dash alone

Estoy a punto de hacer algo como esto:

string.mb_chars.normalize(:kd).gsub(''-'', ''__DASH__'').gsub (/[^x00-/x7F]/n, '''').gsub(''__DASH__'', ''-'').to_s

¿Atroz? Sí...

También lo intenté:

iconv = Iconv.new(''UTF-8'', ''US-ASCII//TRANSLIT'') # Also tried ISO-8859-1 iconv.iconv ''Café'' # Throws an error: Iconv::IllegalSequence: "é"

¿Ayuda por favor?


también elimina espacios, puntos, guiones y quién sabe qué más.

No debería.

string.mb_chars.normalize(:kd).gsub(/[^x00-/x7F]/n, '''').to_s

Ha escrito mal, debe haber una barra invertida antes del x00, para referirse al carácter NUL.

/[^/-x00-/x7F]/n # So it would leave the dash alone

Has puesto el ''-'' entre la ''/' y la ''x'', que romperá la referencia al carácter nulo, y así romperá el rango.