首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ruby gsub和regexp更智能的字符替换

使用ruby gsub和regexp更智能的字符替换
EN

Stack Overflow用户
提问于 2010-04-20 19:50:49
回答 2查看 4.8K关注 0票数 4

我试图为一些文章标题创建类似permalink的行为,并且我不想为permalink添加一个新的db字段。因此,我决定编写一个助手,将我的文章标题转换为:

"O“focoasăa pornit cruciada,mpotriva bărbaţilor zg rciţI”toă

虽然我知道如何用连字符替换空格,并使用以下方法删除其他特殊字符(-除外):

代码语言:javascript
运行
复制
title.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase

我想知道是否有其他方法从一个.gsub方法调用中用一个特定的其他字符替换一个字符,所以我不必为我的本地化的所有UTF-8特殊字符链接title.gsub("ă","a")方法。

我正在考虑用所有的特殊字符和它们的对应字符构建一个散列,但我还没有弄清楚如何使用regexp变量。

我要找的是:

代码语言:javascript
运行
复制
title.gsub(/\s/, "-").gsub(*replace character goes here*).gsub(/[^\w-]/, '').downcase

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-20 19:55:09

我在我的应用程序中通过使用工发组织 gem解决了这个问题:

代码语言:javascript
运行
复制
require 'unidecode'

def uninternationalize(str)
  Unidecoder.decode(str).gsub("[?]", "").gsub(/`/, "'").strip
end
票数 5
EN

Stack Overflow用户

发布于 2010-04-20 21:43:48

如果只想从一个字符音译到另一个字符,可以使用String#tr方法,它执行与Unix tr命令完全相同的操作:将第一个列表中的每个字符替换为第二个列表中相同位置的字符:

代码语言:javascript
运行
复制
'Ünicöde'.tr('ÄäÖöÜüß', 'AaOoUus') # => "Unicode"

然而,我同意@Daniel :使用一些更专业的库可能是个好主意。像这样的东西会变得非常乏味,非常快。此外,其中许多字符实际上都有标准化的音译(→ae,of→oe,.,→ss),用户可能期望音译是正确的(我当然不喜欢被称为Jorg--如果你真的需要,可以叫我Joerg,但我非常喜欢J rg),如果你有一个库为您提供这些音译,为什么不使用它们呢?请注意,有许多音译,它们不是单个字符,因此不能与String#tr一起使用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2678160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档