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