Преобразование регистра
Некоторые методы для работы со строками используют преобразование регистра.
В String:
В Symbol:
Преобразование регистра по умолчанию
По умолчанию все эти методы используют полное преобразование регистра Unicode, подходящее для большинства языков. См. раздел 3.13 (Алгоритмы преобразования регистра по умолчанию) стандарта Unicode.
Преобразование регистра и приведение к нижнему регистру для символов не из ASCII поддерживаются для строк и символов в кодировках UTF-8, UTF-16BE/LE, UTF-32BE/LE и ISO-8859-1~16.
Преобразование регистра с учётом контекста, описанное в таблице 3-17 (Спецификация контекста для преобразования регистра) стандарта Unicode, в настоящее время не поддерживается.
В большинстве случаев после преобразования регистра количество символов в строке остаётся прежним. Есть исключения (см. также :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?, каждый из перечисленных выше методов преобразования регистра принимает необязательный аргумент mapping.
Аргумент принимает одно из следующих значений:
-
: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.
-
: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"
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.