Я продолжал поиск имен, требующих особой обработки. Когда было найдено совпадение без учета регистра, я использовал значение поиска. Это не помогло устранить людей, которые использовали регистр, который не соответствовал «принятой» заглавной букве. Это позволило мне / пользователю добавлять имена по мере необходимости. Я не могу найти свой код, но я получил фамилии с http://www.census.gov/ .
На мой взгляд, единственный разумный способ справиться с этим - позволить пользователям указывать вам, как их имя должно быть написано с заглавной буквы. Любая автоматическая схема кого-то рассердит.
Просто скажите им, что вы СТАРАЯ ШКОЛА. Это делает его простым и на 100% правильным:
- JOHN SMITH
- JOHAN VAN RENSBURG
- DERRICK VON GOGH
- RUBY DE LA FUENTE
- PETER MACLAURIN
- GARRY MCDONALD
Та же логика также помогает со многими проблемами i18n.
Существует также эта реализация в Python , которая основана на этом алгоритме . Основная идея состоит в том, чтобы преобразовать имя в регистр заголовка, а затем сравнить имя с гигантской справочной таблицей исключений.
Но на самом деле то, что сказал Джонатан Леффлер, совершенно верно: если у вас нет каких-либо требований для преобразования ранее существовавших неформатированных данных, автоматическое использование заглавных букв будет делать что-то неправильно (тем более, что правила использования заглавных букв различаются в зависимости от языкового разделения, культурных различий, изменений имен, которые в результате эмиграции или людей, которые просто предпочитают использовать свое имя с большой буквы).
Я не уверен, пригодится ли Ruby, но вы можете взглянуть на NameCase . Даже если вы не работаете с Ruby, вы можете перенести его (это открытый исходный код) на свой язык.