Spec-Zone.ru › Ruby 3.3

Преобразование регистра

Некоторые методы, работающие со строками, используют преобразование регистра.

В строках:

  • String#capitalize

  • String#capitalize!

  • String#casecmp

  • String#casecmp?

  • String#downcase

  • String#downcase!

  • String#swapcase

  • String#swapcase!

  • String#upcase

  • String#upcase!

В символах:

  • Symbol#capitalize

  • Symbol#casecmp

  • Symbol#casecmp?

  • Symbol#downcase

  • Symbol#swapcase

  • Symbol#upcase

По умолчанию преобразование регистра

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API