Преобразовать строку в заголовок с помощью JavaScript

Преобразовать строку в заголовок с помощью JavaScript

У нас здесь, в офисе, было обсуждение, и мы думаем, что попытка автоматически исправить то, как люди вводят имена в том виде, в котором вы хотите, чтобы это происходило, чревата возможными проблемами.

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

Проблемы с использованием заглавных букв первой буквы каждого имени:

• Сокращения, такие как IBM, не разрешенные для ввода, превратятся в Ibm.

• Имя McDonald превратится в Mcdonald, что неверно, то же самое относится и к MacDonald.

• Двуствольные имена, такие как «Мари-Тонкс», превратятся в «Мари-Тонкс».

• Имена как О’Коннор превратятся в О’Коннор.

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

• Добавление правила для исправления имен с Mac, таких как MacDonald, приведет к тому, что имена разрывов, такие как Macy, превратят его в MacY.

Единственное решение, которое мы придумали, которое никогда не бывает неправильным, состоит в том, чтобы использовать каждую букву с заглавной буквы, что является методом грубой силы, который, по-видимому, также использует DBS.

Так что, если вы хотите автоматизировать процесс, это так же просто, как невозможно обойтись без словаря каждого отдельного имени и слова и того, как он должен быть прописным. Если у вас нет правила, которое охватывает все, не используйте его как оно будет просто раздражать ваших пользователей и предлагать людям, которые хотят правильно ввести свои имена, пойти куда-нибудь еще.

§

Было несколько хороших ответов, но многие люди использовали регулярное выражение для поиска слова, но по какой-то причине никто не использует регулярное выражение для замены первого символа. Для объяснения я приведу длинное и более короткое решение.

Длинное решение (более объяснительное). Используя регулярное выражение [^s_-/]* мы можем найти каждое слово в предложении. Впоследствии мы можем использовать регулярное выражение . соответствовать первому символу в слове. Используя версию регулярного выражения замены для обоих, мы можем изменить решение следующим образом:

 function toUpperCase(str) { return str.toUpperCase(); } function capitalizeWord(word) { return word.replace(/./, toUpperCase); } function capitalize(sentence) { return sentence.toLowerCase().replace(/[^s_-/]*/g, capitalizeWord); } console.log(capitalize("hello world")); // Outputs: Hello World 

Для одной функции, которая делает то же самое, мы вкладываем вызовы replace следующим образом:

 function capitalize(sentence) { return sentence.toLowerCase().replace(/[^s_-/]*/g, function (word) { return word.replace(/./, function (ch) { return ch.toUpperCase(); } ); } ); } console.log(capitalize("hello world")); // Outputs: Hello World 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector