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