Заглавные слова в строке - PullRequest
       38

Заглавные слова в строке

150 голосов
/ 25 февраля 2010

Как лучше всего использовать заглавные слова в строке?

Ответы [ 19 ]

213 голосов
/ 29 сентября 2011
String.prototype.capitalize = function() {
    return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};

Использование:

'your string'.capitalize(); // -> 'Your String'

  • исправляет Решение Марко Демайо , в котором первая буква с пробелом не заглавная.

    ' javascript'.capitalize(); // -> ' Javascript'
    
  • может обрабатывать национальные символы и акцентированные буквы.

    'бабушка курит трубку'.capitalize();  // -> 'Бабушка Курит Трубку'
    'località àtilacol'.capitalize()      // -> 'Località Àtilacol'
    

ADD-ON Я считаю это полезным

String.prototype.capitalize = function(lower) {
    return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
'javaSCrIPT'.capitalize();      // -> 'JavaSCrIPT'
'javaSCrIPT'.capitalize(true);  // -> 'Javascript'
197 голосов
/ 22 июля 2016

Кратчайшая реализация для заглавных слов в строке - это использование функций стрелок ES6:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

ES5-совместимая реализация:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

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

  • \ b соответствует границе слова (начало или конец слова);
  • \ w соответствует следующему метасимволу [a-zA-Z0-9].

Вместо символов ASCII обратитесь к этому решению вместо

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

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

  • \ s соответствует пробелу
  • \ S соответствует непробельному символу
  • (x | y) соответствует любой из указанных альтернатив

Группа без захвата могла бы использоваться здесь следующим образом /(?:^|\s)\S/g, хотя флаг g в нашем регулярном выражении не будет захватывать подгруппы в любом случае.

Ура!

29 голосов
/ 25 февраля 2010
function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

вывод: «Это худшая строка из всех»

Обновление:

Похоже, это решение заменяет мое: https://stackoverflow.com/a/7592235/104380

15 голосов
/ 15 апреля 2011

Ответ , предоставленный vsync , работает , если в строке ввода нет акцентированных букв .

Я не знаю причину, но, по-видимому, \b в регулярном выражении совпадает также с акцентированными буквами (проверено на IE8 и Chrome), поэтому строка типа "località" будет ошибочно преобразована в "LocalitÀ" (буква à становится заглавной, потому что регулярное выражение считает, что это граница слова)

Более общая функция, которая работает также с акцентированными буквами :

String.prototype.toCapitalize = function()
{ 
   return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}

Вы можете использовать это так:

alert( "hello località".toCapitalize() );
4 голосов
/ 25 февраля 2010

Джон Резиг (из известной jQuery) перенес сценарий perl, написанный Джоном Грубером, в JavaScript. Этот скрипт пишется заглавными буквами более интеллектуально, он не использует заглавные слова, например «of» и «and».

Вы можете найти его здесь: Заглавная буква в JavaScript

4 голосов
/ 25 февраля 2010

Поскольку все дали вам ответ на JavaScript, который вы просили, я добавлю, что свойство CSS text-transform: capitalize сделает именно это.

Я понимаю, что может быть не тем, о чем вы просите - вы не дали нам никакого контекста, в котором вы работаете, - но если бы это было только для презентации, я определенно идти с альтернативой CSS.

4 голосов
/ 25 февраля 2010

Использование JavaScript и HTML

String.prototype.capitalize = function() {
  return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
    return p1 + p2.toUpperCase();
  });
};
<form name="form1" method="post">
  <input name="instring" type="text" value="this is the text string" size="30">
  <input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
  <input name="outstring" type="text" value="" size="30">
</form>

По сути, вы можете сделать string.capitalize(), и он будет использовать каждую первую букву каждого слова.

Источник: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html

3 голосов
/ 20 марта 2018

Если вы используете lodash в своем приложении JavaScript, вы можете использовать _. Capitalize :

console.log( _.capitalize('ÿöur striñg') );
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
2 голосов
/ 16 января 2019

Краткий ES6 способ сделать это может выглядеть примерно так.

const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)

Это только заглавные буквы первая буква и не влияет на остальную часть предложения.

1 голос
/ 13 марта 2017

Мое решение:

String.prototype.toCapital = function () {
    return this.toLowerCase().split(' ').map(function (i) {
        if (i.length > 2) {
            return i.charAt(0).toUpperCase() + i.substr(1);
        } else {
            return i;
        }
    }).join(' ');
};

Пример:

'álL riGht'.toCapital();
// Returns 'Áll Right'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...