大小写转换¶ ↑
一些面向字符串的方法使用大小写转换。
在 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"