Преобразование регистра
Некоторые методы, работающие со строками, используют преобразование регистра.
В строках:
В символах:
По умолчанию преобразование регистра
По умолчанию все эти методы используют полное преобразование регистра Юникода, что подходит для большинства языков. См. Раздел 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.