이 upcase
방법은 전체 문자열을 대문자로 표시하지만 첫 글자 만 대문자로 바꿔야합니다.
또한 독일어와 러시아어와 같은 몇 가지 인기있는 언어를 지원해야합니다.
어떻게합니까?
답변
사용하는 Ruby 버전에 따라 다릅니다.
루비 2.4 이상 :
Ruby v2.4.0 이 유니 코드 대소 문자 매핑을 지원하기 때문에 작동 합니다.
"мария".capitalize #=> Мария
루비 2.3 이하 :
"maria".capitalize #=> "Maria"
"мария".capitalize #=> мария
문제는 원하는 것을하지 않고 мария
대신 출력 합니다 Мария
.
Rails를 사용하는 경우 쉬운 해결 방법이 있습니다.
"мария".mb_chars.capitalize.to_s # requires ActiveSupport::Multibyte
그렇지 않으면 유니 코드 젬 을 설치하고 다음과 같이 사용해야합니다.
require 'unicode'
Unicode::capitalize("мария") #=> Мария
루비 1.8 :
코딩 마법 주석 을 사용해야합니다 .
#!/usr/bin/env ruby
puts "мария".capitalize
제공 invalid multibyte char (US-ASCII)
하는 동안 :
#!/usr/bin/env ruby
#coding: utf-8
puts "мария".capitalize
오류없이 작동하지만 실제 대문자 사용에 대해서는 “Ruby 2.3 이하”섹션을 참조하십시오.
답변
문자열의 첫 단어의 첫 글자를 대문자로
"kirk douglas".capitalize
#=> "Kirk douglas"
각 단어의 첫 글자를 대문자로
레일에서 :
"kirk douglas".titleize
=> "Kirk Douglas"
또는
"kirk_douglas".titleize
=> "Kirk Douglas"
루비에서 :
"kirk douglas".split(/ |\_|\-/).map(&:capitalize).join(" ")
#=> "Kirk Douglas"
레일 외부에 있지만 여전히 titleize 메소드를 사용하려고합니다.
require 'active_support/core_ext'
"kirk douglas".titleize #or capitalize
답변
불행히도, 기계가 제대로 대문자 / 소문자 / 자본을 작성하는 것은 불가능합니다. 컴퓨터가 이해하기에는 너무 많은 상황 정보가 필요합니다.
루비의 이유 String
클래스는 ASCII 문자에 대한 대문자를 지원은 적어도이 있기 때문에, 어느 정도 잘 정의.
“컨텍스트 정보”란 무엇을 의미합니까?
예를 들어, 대문자를 i
올바르게 사용하려면 텍스트의 언어가 무엇인지 알아야합니다. 예를 들어 영어 에는 점이없는 i
대문자 와 점이있는 I
작은 대문자 만 i
있습니다. 그러나 터키어에는 점이없는 i
자본 I
, 점이있는 자본 İ
, 점이 ı
없는 작은 점, 점이있는 작은 4 개의 i
점이 있습니다. 그래서 영어 'i'.upcase # => 'I'
와 터키어로 'i'.upcase # => 'İ'
. 다시 말해 'i'.upcase
, 언어에 따라 두 가지 다른 결과를 반환 할 수 있기 때문에 언어를 몰라도 단어를 올바르게 대문자로 표기하는 것은 불가능합니다.
그러나 루비는 언어를 모르고 인코딩 만 알고 있습니다. 따라서 Ruby의 내장 기능으로 문자열을 올바르게 대문자로 지정할 수 없습니다.
언어 를 아는 경우 에도 대문자를 올바르게 사용하는 것이 불가능한 경우가 있습니다. 예를 들어 독일어에서 'Maße'.upcase # => 'MASSE'
( Maße 는 복수의 Maß 의미 측정 )입니다. 그러나 'Masse'.upcase # => 'MASSE'
( 질량을 의미 ). 그래서 무엇 'MASSE'.capitalize
입니까? 다시 말해, 정확하게 대문자를 사용하려면 완전한 인공 지능이 필요합니다.
따라서 루비는 때때로 잘못된 대답을하는 대신 때때로 전혀 대답 을 하지 않기로하므로 ASCII가 아닌 문자는 소문자 / 대문자 / 자본 작업에서 무시됩니다. (물론 잘못된 결과를 읽지 만 확인하기는 쉽습니다.)
답변
글쎄, 우리는 첫 글자 만 대문자로하고 나머지는 그대로 두는 방법을 알고 있습니다. 때로는 그것이 바람직한 것입니다.
['NASA', 'MHz', 'sputnik'].collect do |word|
letters = word.split('')
letters.first.upcase!
letters.join
end
=> ["NASA", "MHz", "Sputnik"]
전화 capitalize
하면 결과가됩니다 ["Nasa", "Mhz", "Sputnik"]
.
답변
레일 5+
Active Support 및 Rails 5.0.0.beta4부터 두 가지 방법 중 하나를 사용할 수 있습니다 : String#upcase_first
또는 ActiveSupport::Inflector#upcase_first
.
"my API is great".upcase_first #=> "My API is great"
"мария".upcase_first #=> "Мария"
"мария".upcase_first #=> "Мария"
"NASA".upcase_first #=> "NASA"
"MHz".upcase_first #=> "MHz"
"sputnik".upcase_first #=> "Sputnik"
자세한 내용은 ” Rails 5 : New upcase_first Method “를 확인하십시오.
답변
사용하십시오 capitalize
. 로부터 문자열 문서 :
첫 번째 문자가 대문자로 변환되고 나머지는 소문자로 변환 된 str의 사본을 리턴합니다.
"hello".capitalize #=> "Hello"
"HELLO".capitalize #=> "Hello"
"123ABC".capitalize #=> "123abc"
답변
사용할 수 있습니다 mb_chars
. 이것은 umlaute를 존중합니다.
class String
# Only capitalize first letter of a string
def capitalize_first
self[0] = self[0].mb_chars.upcase
self
end
end
예:
"ümlaute".capitalize_first
#=> "Ümlaute"