Как загладить первую букву каждого слова в строке

Как загладить первую букву каждого мира в строке в Ruby on Rails:

"goyette-xyz-is wide road".titleize returns "Goyette Xyz Is Wide Road".

Мне нужен вывод:

"goyette-xyz is wide road".SOME-FUNCTION should return "Goyette-xyz-is Wide Road".

titleize удаляет подчеркивание и дефисы, но я хочу сохранить его в строке.

Ответы

Ответ 1

вы можете просто использовать .titleize, как этот "i want to make the first letter of each work into a cap".titleize

вы можете узнать больше о titleize из apidocks

titleize (word) public

Заглавные буквы всех слов и заменяет некоторые символы в строке, чтобы создать более привлекательный заголовок. titleize предназначен для создания довольно вывода. Он не используется во внутренних компонентах Rails.

titleize также псевдонимом, как в качестве заголовка.

Примеры:

"man from the boondocks".titleize   # => "Man From The Boondocks"
"x-men: the last stand".titleize    # => "X Men: The Last Stand"
"TheManWithoutAPast".titleize       # => "The Man Without A Past"
"raiders_of_the_lost_ark".titleize  # => "Raiders Of The Lost Ark"

как эта действительность работает

# File activesupport/lib/active_support/inflector/methods.rb, line 115
def titleize(word)
  humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize }
end

Чтобы на самом деле сохранить "-" в работах, мы можем добавить новый метод в класс строки, подобный этому.

# ./lib/core_ext/string.rb
class String
  #"goyette-xyz-is wide road".titleize_with_dashes#=> "Goyette-xyz-is Wide Road"
  def titleize_with_dashes
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize }
  end
end

Ответ 2

Вы можете реализовать собственный метод самостоятельно:

class String
  def my_titleize
    split.map(&:capitalize).join(' ')
  end
end

"goyette-xyz-is wide road".my_titleize
#=> "Goyette-xyz-is Wide Road"

Ответ 3

И если мне нравится прямо сейчас, вам нужно загладить первую букву даже для пунктирных слов, вы можете сделать это вот так:

def titleize_and_keep_dashes(text)
  text.split.map(&:capitalize).join(' ').split('-').map(&:titleize).join('-')
end
titleize_and_keep_dashes("goyette-xyz-is wide road")
# => "Goyette-Xyz Is Wide Road".

Ответ 4

Добавьте .capitalize метод в свою строку, чтобы получить первую букву с заглавной буквы автоматически.