Spec-Zone.ru › Ruby 4.0

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

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

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

Аргумент принимает одно из следующих значений:

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