大小寫轉換¶ ↑
一些字串導向的方法使用大小寫轉換。
在 String 中
在 Symbol 中
預設大小寫轉換¶ ↑
預設情況下,所有這些方法都使用完整的 Unicode 大小寫轉換,這適用於大多數語言。請參閱 Unicode 標準的第 3.13 節(預設大小寫演算法)。
UTF-8、UTF-16BE/LE、UTF-32BE/LE 和 ISO-8859-1~16 字串/符號支援非 ASCII 字元大小寫轉換和折疊。
目前不支援 Unicode 標準中 表 3-17(大小寫轉換的內容規格) 所述的內容相關大小寫轉換。
在大部分情況下,字串的大小寫轉換會產生相同數量的字元。但有例外情況(另請參閱下方的 :fold
)
s = "\u00DF" # => "ß" s.upcase # => "SS" s = "\u0149" # => "ʼn" s.upcase # => "ʼN"
大小寫轉換也可能取決於地區設定(另請參閱下方的 :turkic
)
s = "\u0049" # => "I" s.downcase # => "i" # Dot above. s.downcase(:turkic) # => "ı" # No dot above.
大小寫轉換可能無法還原
s = 'Hello World!' # => "Hello World!" s.downcase # => "hello world!" s.downcase.upcase # => "HELLO WORLD!" # Different from original s.
大小寫轉換方法可能無法維持 Unicode 正規化。請參閱 String#unicode_normalize
)。
大小寫轉換選項¶ ↑
除了 casecmp
和 casecmp?
之外,上面列出的每個大小寫轉換方法都接受選用引數 *options
。
引數可能是
-
僅
:ascii
。 -
僅
:fold
。 -
:turkic
或:lithuanian
或兩者。
選項
-
:ascii
:僅 ASCII 轉換:大寫字母(‘A’..‘Z’)轉換為小寫字母(‘a’..‘z);其他字元不變更s = "Foo \u00D8 \u00F8 Bar" # => "Foo Ø ø Bar" s.upcase # => "FOO Ø Ø BAR" s.downcase # => "foo ø ø bar" s.upcase(:ascii) # => "FOO Ø ø BAR" s.downcase(:ascii) # => "foo Ø ø bar"
-
:turkic
:完整的 Unicode 大小寫轉換,適用於區分點狀和無點狀 I 的突厥語系,例如土耳其語和亞塞拜然語。s = 'Türkiye' # => "Türkiye" s.upcase # => "TÜRKIYE" s.upcase(:turkic) # => "TÜRKİYE" # Dot above. s = 'TÜRKIYE' # => "TÜRKIYE" s.downcase # => "türkiye" s.downcase(:turkic) # => "türkıye" # No dot above.
-
:lithuanian
:尚未實作。 -
:fold
(僅適用於String#downcase
、String#downcase!
和Symbol#downcase
):Unicode 大小寫折疊,範圍比 Unicode 大小寫轉換更廣。s = "\u00DF" # => "ß" s.downcase # => "ß" s.downcase(:fold) # => "ss" s.upcase # => "SS" s = "\uFB04" # => "ffl" s.downcase # => "ffl" s.upcase # => "FFL" s.downcase(:fold) # => "ffl"