Spec-Zone.ru › Ruby 3.2

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

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

В строках:

  • 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