Spec-Zone.ru › Ruby 3.4

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

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

В String:

  • String#capitalize

  • String#capitalize!

  • String#casecmp

  • String#casecmp?

  • String#downcase

  • String#downcase!

  • String#swapcase

  • String#swapcase!

  • String#upcase

  • String#upcase!

В Symbol:

  • Symbol#capitalize

  • Symbol#casecmp

  • Symbol#casecmp?

  • Symbol#downcase

  • Symbol#swapcase

  • Symbol#upcase

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

По умолчанию все эти методы используют полное преобразование регистра 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?, каждый из перечисленных выше методов преобразования регистра принимает необязательные аргументы, *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: полное преобразование регистра 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.
    
  • :lithuanian: пока не реализовано.

  • :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.

Spec-Zone.ru

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