字母替换的更好选择

时间:2010-01-30 14:49:00

标签: ruby-on-rails ruby

还有更好的选择吗?

name.gsub('è','e').gsub('à','a').gsub('ò','o').gsub('ì','i').gsub('ù','u')

感谢

6 个答案:

答案 0 :(得分:9)

使用tr

也许像string.tr('èàòìù', 'eaoiu')

答案 1 :(得分:1)

substitutes = {'è'=>'e', 'à'=>'a', 'ò'=>'o', 'ì'=>'i', 'ù'=>'u'}
substitutes.each do |old, new| 
    name.gsub!(old, new)
end

或者你可以使用an extension of String such as this one为你做这件事。

答案 2 :(得分:1)

如果您真的想要一个完整的解决方案,请尝试从Perl's Unidecode module拉出表格。在将这些表转换为Ruby之后,您将需要遍历输入的每个字符,将表的值替换为该字符。

答案 3 :(得分:0)

在黑暗中进行狂野刺杀,但如果您尝试删除重音字符,因为您使用的是旧版文本编码格式,则应该查看Iconv

关于这个主题的介绍:http://blog.grayproductions.net/articles/encoding_conversion_with_iconv

答案 4 :(得分:0)

如果您想知道您要做什么的技术术语是Case Folding和可能的Unicode Normalization(有时是整理)。

以下a case folding configuration for ThinkingSphinx可让您了解需要担心的角色数量。

答案 5 :(得分:0)

如果JRuby是一个选项,请参阅我的问题的答案:

How do I detect unicode characters in a Java string?

它使用Normalizer处理从字母中删除重音。您可以从JRuby访问该类。