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