首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何替换Ruby中的重音拉丁字符?

如何替换Ruby中的重音拉丁字符?
EN

Stack Overflow用户
提问于 2008-10-22 04:03:23
回答 16查看 45K关注 0票数 79

我有一个ActiveRecord模型Foo,它有一个name字段。我希望用户能够按名称搜索,但我希望搜索忽略大小写和任何重音。因此,我还存储了一个要搜索的canonical_name字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Foo
  validates_presence_of :name

  before_validate :set_canonical_name

  private

  def set_canonical_name
    self.canonical_name ||= canonicalize(self.name) if self.name
  end

  def canonicalize(x)
    x.downcase.  # something here
  end
end

我需要填写“这里的某物”来替换重音字符。还有比这更好的吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x.downcase.gsub(/[àáâãäå]/,'a').gsub(/æ/,'ae').gsub(/ç/, 'c').gsub(/[èéêë]/,'e')....

而且,因为我不是在Ruby1.9上,所以我不能在我的代码中放入那些Unicode文字。实际的正则表达式看起来会丑陋得多。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2008-11-15 06:18:52

Rails已经有一个用于规范化的内置代码,你只需要使用它来规范化你的字符串,形成KD,然后像这样删除其他字符(即重音符号):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>> "àáâãäå".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s
=> "aaaaaa"
票数 63
EN

Stack Overflow用户

发布于 2011-08-23 11:47:20

ActiveSupport::Inflector.transliterate (需要Rails 2.2.1+和Ruby1.9或1.8.7)

示例:

>> ActiveSupport::Inflector.transliterate("àáâãäå").to_s => "aaaaaa"

票数 98
EN

Stack Overflow用户

发布于 2013-12-14 18:33:35

更好的方法是使用I18n:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.9.3-p392 :001 > require "i18n"
 => false
1.9.3-p392 :002 > I18n.transliterate("Olá Mundo!")
 => "Ola Mundo!"
票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/225471

复制
相关文章
go 中 struct 是否可以比较?
今天来水一篇,最近比较忙,一直没有时间写 go 相关的,今天从一个小问题入手,来说说 struct 的比较问题。
LinkinStar
2022/09/01
8400
让点击链接上的元素不触发链接的跳转
最近有个做招聘网站的客户提出了个修改要求,要求报名列表上的某个元素可点击,点击后可以录取这个人。 这不是日了个狗了嘛,现在的列表项的每项是用a标签包着的,并且是多处调用这里,所以不能将a标签改成其它。 不过也得满足不是。 经过一番查找,找到一个方法:阻止冒泡事件
jwj
2022/05/18
1.1K0
onbeforeunload事件被a链接触发的问题
onbeforeunload本身并非W3C DOM-Event标准事件,只不过在很多时候国内的流氓做法就是离开页面,直接弹出收藏本网页的提示(虽然我很讨厌这种做法,但事实上很多公司一直都在这样默默地强奸用户…)
meteoric
2018/11/16
1.9K0
PHP 判断是否 URL 链接
正则 <?php function is_url($url){ $r = "/http[s]?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is"; i
你的明明呐丶
2022/06/27
3.5K0
从Django的Turotial中可以学到什么?
我自己在实现代码的过程中发现这个新手指导基本上就算是Django项目开发的一个缩影了。你完全可以做完它之后继续跟着它的思路走。从这个Tutorials中我们可以学到哪些东西呢?我自己总结了一下。
the5fire
2019/02/28
8530
C#校验Email(电子邮件)地址是否合法
这个C#函数用于校验给定的Email地址是否合法,只针对用于提供的Email地址的格式,不对其是否真实存在进行校验。
用户7108768
2021/11/02
8310
Angular 文档中的修改链接是从哪里改的
aio\tools\transforms\templates\lib\githubLinks.html
HoneyMoose
2019/05/15
1.2K0
Angular 文档中的修改链接是从哪里改的
判断数组中任意数据累加是否可以得到aim
给你一个数组arr,和一个整数aim。 如果可以任意选择arr中的数字,能不能累加得到aim,返回true或者false
名字是乱打的
2022/05/13
3700
Java中是否直接可以使用enum进行传输
我们在进行传输的时候 会有一些状态值,如Status为1代表删除,为0代表失败或者怎么样的。只传输一个)0或者1过去给第三方(此处不包括给前端),如果没有契约第三方会不认识你这个是什么意思,那我们在平时写业务逻辑的时候使用枚举很轻易就知道了什么状态什么值。所以我们在构建DTO对象的时候里面放一个枚举来表示。
袁新栋-jeff.yuan
2020/08/26
3.9K0
Angular 文档中的修改链接是从哪里改的 原
aio\tools\transforms\templates\lib\githubLinks.html
HoneyMoose
2019/05/17
1.2K0
Angular 文档中的修改链接是从哪里改的
                                                                            原
mybatis的mapper文件中的一个标签是否可以写多条SQL语句?是否存在事物?
这样默认是不能实现mybatis的mapper文件中的一个标签可以写多条SQL语句的,会报异常:
趣学程序-shaofeer
2020/05/10
2.8K0
Linux中的链接文件_软链接和硬链接
一、链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块领域,即进行硬连接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制: 不能跨文件系统,因为不同的文件系统有不同的inode
Zoctopus
2018/06/04
6.6K0
从补丁追溯漏洞触发路径
查看github中的补丁信息Fixed chunk size parsing. · nginx/nginx@818807d (github.com)如下:
FB客服
2021/11/08
6970
从补丁追溯漏洞触发路径
Linux中的链接文件_软链接和硬链接
一、链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置的块领域,即进行硬连接时该文件内容没有任何变化,只是增加了一个指向这个文件的inode,并不会额外占用磁盘空间。硬链接有两个限制: 不能跨文件系统,因为不同的文件系统有不同的inode
Zoctopus
2018/06/20
6.9K0
Linux中的硬链接与软链接?
硬链接:在一个文件里面,对于目录来说,记录着文件的名字和inode号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号,是文件的唯一标识),我们也可以在多个目录里记录相同的inode号,它们的名字不一定相同,但只要inode号一样就行,它们最终都链接到一个文件里,这就是硬链接。也就是说,当文件的硬链接数被目录记录了一次,文件的硬链接数就增加了一次。所以,文件只要在目录里存在,它就至少有一个硬链接。
用户4877748
2020/07/21
4.3K0
Redis是否可以存图片、视频?
前几天看到某大型家电工厂的工业互联网系统架构图,发现用MongoDB存储图片及视频。那Redis同样也是Json类型的远程数据字典服务器,也可以用于存储图片、视频。实际Redis可以用512MB的空间存储用于存储字符串型的数据。
希望的田野
2019/09/24
9.7K0
Redis是否可以存图片、视频?
PKS中的RS触发器和SR触发器
上大学时,学习《数字电子技术》这门课,第一次接触到RS触发器的概念,当时学了个囫囵吞枣,只知道有个置位端,还有个复位端,当置位端为ON时,RS触发器的输出为ON,当复位端为ON时,RS触发器的输出为OFF,至于置位端和复位端都为ON,或者都为OFF,触发器的输出会怎样,什么情况下需要使用RS触发器,当时根本就没有考虑,看来教学和应用还是有点脱节的。
剑指工控
2022/11/14
1.4K0
PKS中的RS触发器和SR触发器
Docker容器是否可以改变世界?
2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接触了Docker,熟悉之后,真有一点震惊的感觉,太方便了,可以解决很多问题 Container 通常翻译为容器,但还有另一个意思,就是“集装箱” 集装箱是21世纪最伟大的发明之一,它改变了世界货物运输体系,造就了一个高度自动化、标准化、低成本的物流体系,促进了经济的全球化发展 程序界也出现了同样的一个箱子,就是 Docker容器 Docker的核心特点 Docker是一个开源
dys
2018/04/03
6490
Docker容器是否可以改变世界?
点击加载更多

相似问题

从AMPscript获取电子邮件ID或名称

13

是否可以从电子邮件中的链接更新sharepoint列表项?

10

AMPScript中的IF语句

33

DataView in AMPScript

11

Exacttarget ampscript显示/隐藏移动电子邮件内容

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文