На вопрос "Почему" уже был ответ ... но, как свидетельствуют выбранные ответы и отклики, я думаю, что большинство из нас на самом деле хотят серебряную пулю, чтобы справиться с адом, который такое форматирование имен ... Хотя такое поведение запускается несколькими прописными буквами, я обнаружил, что дефисные имена делают то же самое.
Эти и многие другие случаи уже были обработаны в геме, NameCase .
В версии 2.0 она преобразует строку только в том случае, если строка имеет верхний или нижний регистр, основываясь на определенном наборе правил в качестве наилучшего предположения. Мне это нравится, потому что я уверен, что набор правил никогда не может быть на 100% правильным. Например, Ian McDonald (из Шотландии) имеет заглавную букву, отличную от Ian McDonald (из Ирландии) ... однако эти имена будут обрабатываться правильно во время ввода, если пользователь в частности, а если нет, то при необходимости можно исправить имя и сохранить его форматирование.
Мое решение:
# If desired, add string method once NameCase gem is added
class String
def namecase
NameCase(self)
end
end
Тесты: (name.namecase)
test_names = ["john mark McMillan", "JOHN CAPSLOCK JOE", "test name", "test name-name", "test McName-name", "John w McHENRY", "ian mcdonald", "Ian McDonald", "Ian Mcdonald"]
test_names.each { |name| puts '# "' + name + '" => "' + name.namecase + '"' }
# "john mark McMillan" => "John Mark McMillan"
# "JOHN CAPSLOCK JOE" => "John Capslock Joe"
# "test name" => "Test Name"
# "test name-name" => "Test Name-Name"
# "test McName-name" => "Test McName-Name"
# "John w McHENRY" => "John w McHENRY" -FAIL
# "ian mcdonald" => "Ian McDonald"
# "Ian McDonald" => "Ian McDonald"
# "Ian Mcdonald" => "Ian Mcdonald"
Если вы чувствуете, что вам нужно обработать все угловые случаи на этой странице, и вам нет дела до потери имен, которые могли быть отформатированы в начале, например. Йен Макдональд (из Ирландии) ... сначала вы могли бы использовать upcase
:
Тесты: (name.upcase.namecase)
test_names.each { |name| puts '# "' + name + '" => "' + name.upcase.namecase + '"' }
# "john mark McMillan" => "John Mark McMillan"
# "JOHN CAPSLOCK JOE" => "John Capslock Joe"
# "test name" => "Test Name"
# "test name-name" => "Test Name-Name"
# "test McName-name" => "Test McName-Name"
# "John w McHENRY" => "John W McHenry"
# "ian mcdonald" => "Ian McDonald"
# "Ian McDonald" => "Ian McDonald"
# "Ian Mcdonald" => "Ian McDonald"
Единственная серебряная пуля - идти в старую школу ... ВСЕ КОПЫ. Но кому нужна эта глазница в их современном веб-приложении?