我想大寫一個UTF-8字符串的每個單詞。但是,我需要的功能是忽略一些開頭的特殊字符,如「( - 。,」。該功能將用於大寫歌曲標題,如下所示:用UTF-8字符串在異常情況下大寫Ruby的第一個字母
marko,gabriel boni,simple傑克 - 召回(原混合)
...將輸出:
馬爾科,加布裏埃爾·博尼,簡單的傑克 - 召回(原件混合)
還應該能夠充分利用UTF-8字符樣「Å」。「é」>「É」。
我想大寫一個UTF-8字符串的每個單詞。但是,我需要的功能是忽略一些開頭的特殊字符,如「( - 。,」。該功能將用於大寫歌曲標題,如下所示:用UTF-8字符串在異常情況下大寫Ruby的第一個字母
marko,gabriel boni,simple傑克 - 召回(原混合)
...將輸出:
馬爾科,加布裏埃爾·博尼,簡單的傑克 - 召回(原件混合)
還應該能夠充分利用UTF-8字符樣「Å」。「é」>「É」。
"åbc".mb_chars.capitalize
#=> "Åbc"
"ébc".mb_chars.capitalize.to_s
#=> "Ébc"
UPD
,而忽略無字字符:
string = "-åbc"
str = string.match(/^(\W*)(.*)/)
str[1] + str[2].mb_chars.capitalize.to_s
#=> "-Åbc"
似乎mb_char是RoR的一部分。 – 2017-03-09 15:17:20
@MateuszKonieczny權利 – fl00r 2017-03-09 16:18:54
I d身份證,並想過濾很多東西。
我創建了一個常量文件initializers/constants.rb
letters = ("a".."z").collect
numbers = ("1".."9").collect
symbols = %w[! @ # $ %^& * () _ - + = | \] { } : ; ' " ?/> . < , ]
FILTER = letters + numbers + symbols
然後只是做了檢查,看是否有人在我的過濾器:
if !FILTER.include?(c)
#no
else
#yes
end
您還可以檢查編碼,它的價值,但你需要知道範圍或具體的數值。我用中文字符做了這個,所以這是我得到我的價值的地方。我會發布一些代碼來給你一個想法:
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
你當然需要知道這裏的具體數值。
爲什麼Unicode :: capitalize方法從unicode library不適合您的需求是否有某些東西?
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
=> "-åäöéèí"
這應該是正確的答案 – Nerian 2013-01-22 00:16:38
你的意思是使用羅馬字符,正確的語言嗎?不把UTF-8字符串「ご飯を食べた」分成「ご飯」,「を」,「食べた」。 – sawa 2011-05-24 09:04:55
對不起,是的,這是正確的。我不確定如何描述它。但像「åäöéèí」等字符 – Johan 2011-05-24 09:07:35