首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UTF-8字符串大写Ruby中的第一个字母,但有例外

使用UTF-8字符串大写Ruby中的第一个字母,但有例外
EN

Stack Overflow用户
提问于 2011-05-24 16:51:51
回答 3查看 1.8K关注 0票数 4

我想要将UTF-8字符串中的每个单词大写。但是,我需要该函数忽略单词开头的一些特殊字符,如"(-.,“)。该函数将用于将歌曲标题大写,如下所示:

marko,gabriel boni,simple jack - recall (原创混音)

...would输出:

Marko,Gabriel Boni,Simple Jack - Recall (原创混音)

它还应该能够大写UTF-8字符,如“节”>“ä”。"é“>”“。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-24 19:06:42

代码语言:javascript
复制
"åbc".mb_chars.capitalize
#=> "Åbc" 
"ébc".mb_chars.capitalize.to_s
#=> "Ébc"

更新

并且不忽略任何单词字符:

代码语言:javascript
复制
string = "-åbc"
str = string.match(/^(\W*)(.*)/)
str[1] + str[2].mb_chars.capitalize.to_s
#=> "-Åbc" 
票数 4
EN

Stack Overflow用户

发布于 2011-05-24 18:55:17

是不是有什么原因导致unicode library的Unicode::capitalize方法不适合你的需求?

代码语言:javascript
复制
irb(main):013:0> require 'unicode'
=> true
irb(main):014:0> begin Unicode::capitalize 'åäöéèí' rescue $stderr.print "unicode error\n" end
=> "Åäöéèí"
irb(main):015:0> begin Unicode::capitalize '-åäöéèí' rescue $stderr.print "unicode error\n" end 
=> "-åäöéèí"
票数 8
EN

Stack Overflow用户

发布于 2011-05-24 17:02:41

我这样做了,想要过滤很多东西。

我创建了一个常量文件initializers/constants.rb

代码语言:javascript
复制
letters = ("a".."z").collect
numbers = ("1".."9").collect
symbols = %w[! @ # $ % ^ & * ( ) _ - + = | \] { } : ; ' " ? / > . < , ]
FILTER = letters + numbers + symbols

然后检查它是否在我的过滤器中:

代码语言:javascript
复制
if !FILTER.include?(c)
    #no
else
    #yes
end

您还可以检查unicode的值,但您需要知道范围或特定值。我是用汉字做的,所以我的价值观就是从这里得到的。我将发布一些代码,只是为了给你一个想法:

代码语言:javascript
复制
def check(char)
   char = char.unpack('U*').first
   if char >= 0x4E00 && char <= 0x9FFF
     return true
   end
   if char >= 0x3400 && char <= 0x4DBF
     return true
   end
   if char >= 0x20000 && char <= 0x2A6DF
     return true
   end
   if char >= 0x2A700 && char <= 0x2B73F
     return true
   end
   return false
 end

当然,您需要知道这里的特定值。

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

https://stackoverflow.com/questions/6107925

复制
相关文章

相似问题

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