Как сделать первую букву строки заглавной в JavaScript?

Как сделать первую букву строки заглавной, но не изменить регистр любой другой буквы?

Например:

  • "this is a test" -> "This is a test"
  • "the Eiffel Tower" -> "The Eiffel Tower"
  • "/index.html" -> "/index.html"
22.06.2009 08:25:31
У Underscore есть плагин underscore.string, который включает в себя это и множество других замечательных инструментов.
Aaron 15.04.2013 19:16:14
А как насчет:return str.replace(/(\b\w)/gi,function(m){return m.toUpperCase();});
Muhammad Umer 21.11.2014 19:25:37
Проще:string[0].toUpperCase() + string.substring(1)
dr.dimitru 25.11.2015 04:00:25
`${s[0].toUpperCase()}${s.slice(1)}`
noego 2.11.2019 20:20:04
([initial, ...rest]) => [initial.toUpperCase(), ...rest].join("")
Константин Ван 6.01.2020 06:49:40
30 ОТВЕТОВ

Основное решение:

function capitalizeFirstLetter(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}

console.log(capitalizeFirstLetter('foo')); // Foo

Некоторые другие ответы изменяются String.prototype(этот ответ также использовался), но я бы посоветовал не делать этого сейчас из-за удобства сопровождения (сложно определить, куда добавляется функция, prototypeи может вызвать конфликты, если другой код использует то же имя / браузер добавляет нативную функцию с тем же именем в будущем).

... и затем, когда вы рассматриваете интернационализацию, в этом вопросе есть еще много всего, как показывает этот удивительно хороший ответ (скрытый ниже).

Если вы хотите работать с кодовыми точками Unicode вместо кодовых единиц (например, для обработки символов Unicode вне Базовой многоязычной плоскости), вы можете использовать тот факт, что String#[@iterator]работает с кодовыми точками, и вы можете использовать toLocaleUpperCaseдля получения корректного локали в верхнем регистре:

function capitalizeFirstLetter([ first, ...rest ], locale = navigator.language) {
  return [ first.toLocaleUpperCase(locale), ...rest ].join('');
}

console.log(capitalizeFirstLetter('foo')); // Foo
console.log(capitalizeFirstLetter("
5736
2.04.2020 18:26:05
подстрока понимается в большем количестве браузеров, чем
mplungjan 6.07.2011 13:07:05
добавить к karim79 - возможно, излишне делать его функцией, поскольку javascript будет делать то же самое с переменной без переноса функции. Я полагаю, что было бы более понятно, используя функцию, но в противном случае она является родной, зачем усложнять ее оболочкой функции?
Ross 24.10.2012 23:36:15
Не должны ли мы также уменьшить размер среза (1)?
hasen 30.01.2014 17:58:43
Нет, потому что ОП привел этот пример: the Eiffel Tower -> The Eiffel Tower. Плюс функция называется capitaliseFirstLetterне так capitaliseFirstLetterAndLowerCaseAllTheOthers.
ban-geoengineering 2.08.2014 10:24:13
Никого не волнует важное правило ООП? - Никогда не редактировать объекты, которые вам не принадлежат? , Кстати, этот однострочник выглядит намного элегантнее:string[0].toUpperCase() + string.substring(1)
dr.dimitru 9.12.2015 09:00:17

Вот функция с именем ucfirst () (сокращение от «первая буква верхнего регистра»):

function ucfirst(str) {
    var firstLetter = str.substr(0, 1);
    return firstLetter.toUpperCase() + str.substr(1);
}

Вы можете использовать строку с заглавной буквы, вызывая ucfirst («некоторая строка») - например,

ucfirst("this is a test") --> "This is a test"

Это работает, разделив строку на две части. В первой строке он извлекает firstLetter, а затем во второй строке он использует прописную букву firstLetter , вызывая firstLetter.toUpperCase (), и соединяет его с остальной частью строки, которая определяется путем вызова str.substr (1) .

Вы можете подумать, что это не сработает для пустой строки, и на самом деле в языке, подобном C, вам придется обслужить это. Однако в JavaScript, когда вы берете подстроку пустой строки, вы просто возвращаете пустую строку.

34
12.08.2016 22:36:19
Используйте String.substring () или String.slice () ... Не используйте substr () - это не рекомендуется.
James 22.06.2009 11:11:45
@ 999: где говорится, что substr()это устарело? Это даже не сейчас, три года спустя, не говоря уже о том, чтобы в 2009 году вы сделали этот комментарий.
Dan Dascalescu 7.11.2012 06:12:41
substr()может не помечаться как устаревшая в любой популярной реализации ECMAScript (я сомневаюсь, что она не исчезнет в ближайшее время), но это не является частью спецификации ECMAScript. Третье издание спецификации упоминает его в ненормативном приложении, чтобы «предложить единую семантику для таких свойств, не делая свойства или их семантику частью этого стандарта».
Peter Rust 21.11.2012 22:05:22
Имея 3 методы , которые делают то же самое ( substring, substrи slice) слишком много, ИМО. Я всегда использую sliceего, потому что он поддерживает отрицательные индексы, у него нет запутанного поведения подстановки аргументов, и его API похож на sliceдругие языки.
Peter Rust 21.11.2012 22:12:12

Вот более объектно-ориентированный подход:

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

Вы бы вызвали функцию, вот так:

"hello world".capitalize();

Ожидаемый результат:

"Hello world" 
1340
12.05.2019 19:14:30
Мне нравится это решение, потому что оно похоже на Ruby, а Ruby сладок! :) Я строчные буквы всех других букв строки, чтобы он работал точно так же, как Ruby:return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
ma11hew28 8.03.2011 18:21:04
В этом мире пост-Prototype.js не предлагается изменять или расширять собственные объекты.
Ryan 25.07.2011 22:24:09
@rxgx - бугмен "не расширять" теперь начинает отмирать (слава богу), и люди вытаскивают свои головы из jSand и понимают, что это всего лишь языковая функция. Тот факт, что Prototype.js на короткое время расширил сам объект, не означает, что расширение Native - это плохо. Вам не следует делать это, если вы пишете код для неизвестного потребителя (например, сценарий аналитики, работающий на случайных сайтах), но в остальном это нормально.
csuwldcat 19.05.2012 20:47:18
@csuwldcat Что если другая используемая вами библиотека добавляет собственную заглавную букву, не зная об этом? Расширение прототипов - плохая форма, независимо от того, делал это Prototype.js или нет. С ES6 встроенные функции позволят вам съесть свой торт и съесть его тоже. Я думаю, вы могли бы сбить с толку "бугмена", отмирающего для людей, создающих прокладки, которые соответствуют спецификации ECMASCRIPT. Эти прокладки отлично подходят, потому что другая библиотека, которая добавила прокладку, реализовала бы ее таким же образом. Тем не менее, добавление ваших собственных не-спецификаций следует избегать.
Justin Meyer 17.09.2014 20:37:27
Расширение аборигенов ЧРЕЗВЫЧАЙНО плохая практика. Даже если вы скажете: «О, я никогда не собираюсь использовать этот код с чем-либо еще», вы (или кто-то еще), вероятно, будете. Затем они потратят три дня, пытаясь выяснить какую-то странную математическую ошибку, потому что кто-то расширил Number.money (), чтобы иметь дело с валютой, немного отличающейся от вашей другой библиотеки. Серьезно, я видел, как это происходит в большой компании, и не стоит никому отлаживать, чтобы выяснить, какая библиотека работает с прототипами туземцев.
phreakhead 30.12.2014 01:03:04

ucfirstФункция работает , если вы делаете это так.

function ucfirst(str) {
    var firstLetter = str.slice(0,1);
    return firstLetter.toUpperCase() + str.substring(1);
}

Спасибо JP за акларацию.

19
21.04.2016 06:08:42
хорошее название для функции! Это имя идентично эквиваленту PHP. На самом деле есть целая библиотека PHP-функций, написанных на JS; он называется PHP.js и находится на http://phpjs.org
Hussam 8.12.2011 14:29:12
Один лайнер:string[0].toUpperCase() + string.substring(1)
dr.dimitru 25.11.2015 04:01:07
@TarranJones здесь пуленепробиваемый один вкладыш:(string[0] || '').toUpperCase() + string.substring(1)
dr.dimitru 6.05.2016 18:20:35
@ dr.dimitru: Вместо идиоматического (string[0] || '')вы могли бы просто string.charAt(0).
Przemek 24.04.2017 18:24:05
String.prototype.capitalize = function(){
    return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase();
    } );
};

Применение:

capitalizedString = someString.capitalize();

Это текстовая строка => Это текстовая строка

29
21.04.2016 06:08:55
Регулярные выражения излишни для этого.
Anthony Sottile 14.06.2012 02:40:35
+1, это то, что я действительно искал. Есть небольшая ошибка, хотя, это должно быть return.this.toLocaleLowerCase().replace(...
tomdemuyt 14.01.2013 21:55:51
+1, я нашел эту страницу в поисках javascript-версии phps ucfirst, которая, как я подозреваю, такова, как ее находит большинство людей.
Benubird 9.04.2013 13:58:12
@DanDascalescu Я нашел это полезным, так что +1 утилитаризм и -1 анальная сохранность. Он включил пример, поэтому его функция понятна.
Travis Webb 2.08.2013 10:24:50
String.prototype.capitalize = function(){ return this.replace( /(^|\s)[a-z]/g , function(m){ return m.toUpperCase(); }); }; Я немного рефакторинг вашего кода, вам нужно только первое совпадение.
IGRACH 28.04.2014 16:29:38

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

String.prototype.capitalize = function(){
    return this.toLowerCase().replace( /(^|\s)([a-z])/g , function(m, p1, p2) {
        return p1 + p2.toUpperCase();
    });
}
-6
21.04.2016 06:09:06
Функция не должна влиять на строку, которая уже прописна. Вопрос специально задавался для того, чтобы оставшиеся символы не были затронуты; см. его пример с «Эйфелевой башней» -> «Эйфелева башня». Вы определенно не должны все в нижнем регистре в первую очередь.
meagar♦ 28.01.2011 20:32:07

Если вы используете один из ответов на регулярные выражения, помните, что они будут работать только с символами ASCII. Все ваши юникодные буквы не будут в верхнем регистре. Библиотека XRegExp и ее плагины Unicode решают эту проблему, если вы хотите использовать регулярные выражения . Так что-то вроде этого будет работать:

String.prototype.capitalize = function () {
    return this.replace(XRegExp("^\\p{L}"), function ($0) { return $0.toUpperCase(); })
}

Учитывая, что он все еще не охватывает все возможности (комбинированные символы, см. Http://www.regular-expressions.info/unicode.html ), кажется, проще использовать подход .charAt (0) .toUpperCase ().

8
10.03.2011 07:26:31
`String.prototype.capitalize = String.prototype.capitalize || function () {var first = this.substring (0,1); return first.toUpperCase () + this.substring (1); };
Dhiraj Himani 6.02.2017 07:47:27

Если вы хотите переформатировать весь текст заглавными буквами, вы можете изменить другие примеры следующим образом:

function capitalize (text) {
    return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}

Это обеспечит изменение следующего текста:

TEST => Test
This Is A TeST => This is a test
36
21.04.2016 06:09:19
Вероятно, стоит отметить, что это также преобразует такие вещи, как аббревиатуры, в нижний регистр, так что, возможно, не самая лучшая идея в большинстве случаев
monokrome 25.04.2016 05:08:23
Кроме того, действительно ли GAMITG внес изменения, просто чтобы удалить часть пробела из некодовой части поста? О_О
monokrome 28.08.2016 03:25:05
Кстати, это нарушит прописные аббревиатуры, так что будьте осторожны, вы все <3
monokrome 15.03.2019 21:53:43

Вот сокращенная версия популярного ответа, который получает первую букву, рассматривая строку как массив:

function capitalize(s)
{
    return s[0].toUpperCase() + s.slice(1);
}

Обновить:

Согласно комментариям ниже, это не работает в IE 7 или ниже.

Обновление 2:

Чтобы избежать undefinedпустых строк (см . Комментарий @ njzk2 ниже ), вы можете проверить наличие пустой строки:

function capitalize(s)
{
    return s && s[0].toUpperCase() + s.slice(1);
}
285
23.05.2017 12:34:59
Это не будет работать в IE <8, так как эти браузеры не поддерживают индексацию строк. Сам IE8 поддерживает это, но только для строковых литералов - не для строковых объектов.
Mathias Bynens 14.02.2012 11:33:44
Кому интересно, рынок IE7 составляет менее 5%! и это, вероятно, старая машина твоей Греммы и Гремпы. Я говорю короткий код FTW!
vsync 3.12.2012 06:20:35
@MathiasBynens Знаете ли вы, затрагивает ли это какие-либо старые браузеры не IE или просто IE7? Если в 2014 году индексирование строковых литералов не затронуло ни один другой браузер, все будет в порядке. :)
hexalys 1.01.2014 09:58:24
@vsync Я просто имел в виду, что в зависимости от вашей демографии пользователей, иногда (хотя с благодарностью все меньше и меньше по мере того, как мы проходим 2014 год и более), выгодно поддерживать старые браузеры, такие как IE7 ...
joshuahedlund 14.03.2014 17:47:04
@ njzk2, чтобы обработать пустую строку, вы можете обновить это: return s && s[0].toUpperCase() + s.slice(1);
joelvh 1.10.2014 22:38:40

CoffeeScript

ucfirst = (str) -> str.charAt(0).toUpperCase() + str.slice(1)

В качестве метода-прототипа String:

String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
10
21.04.2016 06:09:32
Глупый вопрос, но как бы вы добавили это к прототипу String в coffeescript?
longda 15.08.2012 17:54:51

Прописать первую букву всех слов в строке:

function ucFirstAllWords( str )
{
    var pieces = str.split(" ");
    for ( var i = 0; i < pieces.length; i++ )
    {
        var j = pieces[i].charAt(0).toUpperCase();
        pieces[i] = j + pieces[i].substr(1);
    }
    return pieces.join(" ");
}
62
21.04.2016 06:09:45
Перечитайте вопрос: я хочу использовать заглавные буквы первого символа строки, но не изменяю регистр других букв.
JimmyPena 30.11.2011 19:13:07
Я знаю, что сделал. Я бы добавил одну вещь, если вся строка начинается с заглавной буквы :iece [i] = j +iece [i] .substr (1) .toLowerCase ();
Malovich 20.12.2012 21:16:13
Другое решение этого случая: функция capitaliseFirstLetters (s) {return s.split ("") .map (function (w) {return w.charAt (0) .toUpperCase () + w.substr (1)}). Join ("")} Может быть хорошим однострочником, если он не включен в функцию.
Luke Channings 10.03.2013 21:36:38
Было бы лучше, чтобы в первую очередь строчная вся строка
Magico 6.07.2016 10:36:01
Помимо этой функции, не отвечающей на вопрос, на самом деле она также слишком сложна. s => s.split(' ').map(x => x[0].toUpperCase() + x.slice(1)).join(' ')
OverCoder 28.07.2017 18:10:23

В CSS это выглядит проще:

<style type="text/css">
    p.capitalize {text-transform:capitalize;}
</style>
<p class="capitalize">This is some text.</p>

Это из CSS text-transform PropertyW3Schools ).

38
21.04.2016 06:09:56
@Simon Не указано, что строка обязательно будет выводиться как часть документа HTML - CSS будет полезен только в том случае, если он есть.
Adam Hepton 18.01.2012 09:32:40
Адам, правда, но я предполагаю, что более 95% Javascript там используется с HTML и CSS. К сожалению, оператор «прописные» на самом деле использует заглавные буквы в каждом слове , поэтому вам все равно понадобится JS, чтобы использовать только первую букву строки.
Simon East 21.01.2012 04:24:39
Неверно, Динеш. Он сказал первый символ строки .
Simon East 26.06.2012 00:02:22
Этот ответ, несмотря на нелепое количество голосов, просто неверен, так как он будет использовать первую букву каждого слова. @ Райан, вы получите значок дисциплины, если удалите его. Пожалуйста, сделай так.
Dan Dascalescu 7.11.2012 06:06:50
Согласитесь с @DanDascalescu - ответ Райана совершенно неправильный.
Timo 14.11.2012 13:15:33

Итак, я новичок в JavaScript. Я не смог заставить вышесказанное работать на меня. Так что я начал собирать это сам. Вот моя идея (примерно такой же, другой и рабочий синтаксис):

String name = request.getParameter("name");
name = name.toUpperCase().charAt(0) + name.substring(1);
out.println(name);

Здесь я получаю переменную из формы (она также работает вручную):

String name = "i am a Smartypants...";
name = name.toUpperCase().charAt(0) + name.substring(1);
out.println(name);

Вывод: «Я умница ...»;

7
21.04.2016 06:10:09

В CSS:

p:first-letter {
    text-transform:capitalize;
}
564
12.08.2016 22:36:50
ОП просит JS решение.
Antonio Max 23.09.2013 15:23:11
. $ ( '# mystring_id') текст (строка) .css ( 'текст-преобразования', 'выгоду');
DonMB 24.09.2015 17:34:23
Кроме того, это влияет только на отображение строки, а не на фактическое значение. Если это в форме, например, значение все равно будет представлено как есть.
dmansfield 7.06.2016 13:26:31
Этот ответ помог мне понять, что решение CSS действительно больше подходит для того, что я делаю. @dudewad: Ответ, вероятно, должен дать отказ от ответственности, что это не решение JS, но может быть более подходящим в зависимости от необходимости.
joshden 10.03.2018 20:42:55
Для примерно 80% зрителей, пришедших на этот вопрос, это будет лучшим ответом. Не ответ на вопрос , а на проблему .
Jivan 23.03.2018 11:54:06
// Uppercase first letter
function ucfirst(field) {
    field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}

Применение:

<input type="text" onKeyup="ucfirst(this)" />
12
12.08.2016 22:37:13
Не было ссылки на поле ввода или требование события для обработки этого. Помимо этого, field.valueможет быть сокращен с переменной для удобства чтения.
abestic9 17.05.2013 02:29:26

В CoffeeScript добавьте в прототип строку:

String::capitalize = ->
  @substr(0, 1).toUpperCase() + @substr(1)

Использование будет:

"woobie".capitalize()

Что дает:

"Woobie"
13
21.02.2014 12:21:36
Это вопрос JavaScript.
Cobby 6.05.2014 00:54:05
@Cobby - И это ответ coffeescript.
longda 6.05.2014 19:29:08
Я думаю, что Кобби пытается сказать, что некоторые идиоты пытаются выполнить каждую простую задачу JavaScript, используя глупые библиотеки, в то время как то же самое решение в ванили так же просто, какString.prototype.capitalize = function () { return this.substring(0,1).toUpperCase() + this.substring(1).toLowerrCase() }
Shiala 16.07.2014 17:17:02
Coffeescript - это язык препроцессора, а не библиотека ... Библиотека для этого была бы глупой
TaylorMac 30.07.2014 20:18:31
Позвольте записи заявить: CoffeeScript is a little language that compiles into JavaScript.Кроме того, The golden rule of CoffeeScript is: "It's just JavaScript."я думаю , что если кто-то действительно понимает эти два предложения, вы поймете, почему я включил этот ответ. Надеюсь, что все прояснилось. Источник: coffeescript.org
longda 30.07.2014 23:28:53

Одно из возможных решений:

function ConvertFirstCharacterToUpperCase(text) {
    return text.substr(0, 1).toUpperCase() + text.substr(1);    
}

Использовать этот:

 alert(ConvertFirstCharacterToUpperCase("this is string"));

Здесь работает JS Fiddle

11
12.08.2016 22:38:00
yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });

(Вы можете инкапсулировать его в функцию или даже добавить его в прототип String, если будете часто его использовать.)

20
12.08.2016 22:38:32
Несмотря на то, что за это проголосовали, это самое медленное решение, опубликованное здесь. Я собрал небольшой тест скорости
Robin van Baalen 13.02.2013 13:17:16
@RobinvanBaalen Ваша ссылка сейчас не работает. Есть обновленный?
Brad 23.01.2017 03:29:12
Регулярное выражение для этого излишне, предпочитайте более простое: str.charAt (0) .toUpperCase () + str.slice (1)
Simon 23.01.2017 13:36:38
@ К сожалению, нет
Robin van Baalen 23.01.2017 18:54:18
Часто, если вы хотите решить свою проблему с помощью регулярных выражений, вы сталкиваетесь с двумя проблемами.
Przemek 23.09.2017 19:18:54

Мы могли бы получить первого персонажа с одним из моих любимых RegExp, похожим на милый смайлик:/^./

String.prototype.capitalize = function () {
  return this.replace(/^./, function (match) {
    return match.toUpperCase();
  });
};

И для всех любителей кофе:

String::capitalize = ->
  @replace /^./, (match) ->
    match.toUpperCase()

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

var capitalize = function (input) {
  return input.replace(/^./, function (match) {
    return match.toUpperCase();
  });
};
48
12.06.2015 23:11:41
Есть лучший способ сделать это без изменения прототипа String.
Big McLargeHuge 9.07.2013 20:42:35
@ davidkennedy85 Конечно! Но это простой, а не лучший способ ... ;-)
yckart 9.07.2013 22:01:32
Дорогой лорд, на этот вопрос миллион ответов! Ваше решение выглядит еще лучше в es6. 'Answer'.replace(/^./, v => v.toLowerCase())
stwilz 29.07.2019 00:40:58

В другом случае мне нужно, чтобы первая буква была прописной, а остальные - строчными. Следующие случаи заставили меня изменить эту функцию:

//es5
function capitalize(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
capitalize("alfredo")  // => "Alfredo"
capitalize("Alejandro")// => "Alejandro
capitalize("ALBERTO")  // => "Alberto"
capitalize("ArMaNdO")  // => "Armando"

// es6 using destructuring 
const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();
148
5.06.2018 21:49:53
«... но не меняйте регистр других букв». Это не правильный ответ на вопрос, заданный ОП.
Carlos Muñoz 1.07.2014 19:31:00
@ CarlosMuñoz, если вы прочитаете вступительное предложение, он говорит, что это для другого случая.
TMH 5.09.2014 08:25:33
@ TomHart Именно поэтому это не решение вопроса. Это должен быть комментарий или другой вопрос и ответ
Carlos Muñoz 5.09.2014 13:38:38
Я согласен с вами в этом, но я вижу, что многие люди заканчивают здесь, пытаясь сделать то, что делает этот ответ.
TMH 5.09.2014 13:43:21

Функция принимает 2 аргумента: start - начальный индекс; длина - длина подстроки для заглавных букв

    String.prototype.subUpper = function () {
        var result = this.toString();
        var start = 0;
        var length = 1;
        if (arguments.length > 0) {
            start = arguments[0];
            if (start < this.length) {
                if (arguments.length > 1) { length = arguments[1]; }
                if (start + length > this.length) {
                    length = this.length - start;
                }
                var startRest = start + length;
                var prefix = start > 0 ? this.substr(0, start) : String.empty;
                var sub = this.substr(start, length);
                var suffix = this.substr(startRest, this.length - startRest);
                result = prefix + sub.toUpperCase() + suffix;
            }
        }
        return result;
    };
3
21.11.2013 09:48:20
Зачем иметь такое огромное решение, когда другие намного элегантнее и проще?
Craicerjack 11.06.2015 12:20:33
String.prototype.capitalize = function(allWords) {
   return (allWords) ? // if all words
      this.split(' ').map(word => word.capitalize()).join(' ') : //break down phrase to words then  recursive calls until capitalizing all words
      this.charAt(0).toUpperCase() + this.slice(1); // if allWords is undefined , capitalize only the first word , mean the first char of the whole string
}

А потом:

 "capitalize just the first word".capitalize(); ==> "Capitalize just the first word"
 "capitalize all words".capitalize(true); ==> "Capitalize All Words"

Обновление ноябрь 2016 (ES6), просто для удовольствия:

const capitalize = (string = '') => [...string].map(    //convert to array with each item is a char of string by using spread operator (...)
    (char, index) => index ? char : char.toUpperCase()  // index true means not equal 0 , so (!index) is the first char which is capitalized by `toUpperCase()` method
 ).join('')                                             //return back to string

тогда capitalize("hello") // Hello

45
2.12.2016 20:29:50
Я думаю, что это плохое решение по двум причинам: изменение прототипа примитива - плохая идея. Если спецификация меняется, и они решают выбрать «заглавные буквы» в качестве нового имени свойства прото, вы нарушаете функциональность основного языка. Кроме того, выбранное имя метода плохое. На первый взгляд, я думаю, это заглавная строка. Лучше было бы использовать более описательное имя, такое как PHP ucFirst или что-то подобное.
dudewad 22.02.2017 01:08:08
Другой ES6 ответ проще: const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();.
Dan Dascalescu 22.06.2019 05:50:17

Я пытался сделать то же самое (то есть, заглавная буква в первой строке в то время как она набирается), используя jQuery. Я искал ответ по всей сети, но не смог его найти. Однако я смог обойти использование on()функции в jQuery следующим образом:

$("#FirstNameField").on("keydown",function(e){
    var str = $("#FirstNameField").val();
    if(str.substring()===str.substring(0,1)){
        $("#FirstNameField").val(str.substring(0,1).toUpperCase());
    } 
});

Эта функция на самом деле использует заглавные буквы, в то время как участник ввода печатает непрерывно.

5
22.12.2015 17:05:11

Вот моя попытка сделать универсальную функцию, которая может использовать только первую букву или первую букву каждого слова, включая слова, разделенные тире (как некоторые имена на французском языке).

По умолчанию функция использует заглавные буквы только первой буквы, а остальные остаются нетронутыми.

Параметры :

  • lc : true, чтобы загнать в нижний регистр остальные слова
  • все : правда, чтобы заглавные буквы каждое слово

 

if (typeof String.prototype.capitalize !== 'function') {
    String.prototype.capitalize = function(lc, all) {
        if (all) {
            return this.split( " " ).map( function(currentValue, index, array ) {
                return currentValue.capitalize( lc );
            }, this).join(" ").split("-").map(function(currentValue, index, array) {
                return currentValue.capitalize(false);
            }, this).join("-");
        }
        else {
            return lc ? this.charAt(0).toUpperCase() + this.slice(1 ).toLowerCase() : this.charAt(0).toUpperCase() + this.slice(1);
        }
    }
}
8
13.06.2019 23:09:57
jQuery для обновления вводимых пользователем заглавных букв: $ ('. on-change-capitalize'). change (function () {$ (this) .val ($ (this) .val (). capitalize (true, true));} ); Кстати, это также работает с UTF8 символов;) спасибо!
Lukas Liesis 4.04.2014 06:51:32

Или вы можете использовать Sugar.js capitalize ()

Пример:

'hello'.capitalize()           -> 'Hello'
'hello kitty'.capitalize()     -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'
10
15.04.2014 11:02:35
var str = "test string";
str = str.substring(0,1).toUpperCase() + str.substring(1);
28
5.06.2014 04:26:48

Если вы используете underscore.js или Lo-Dash , библиотека underscore.string предоставляет расширения строк, включая прописные:

_.capitalize (string) Преобразует первую букву строки в верхний регистр.

Пример:

_.capitalize("foo bar") == "Foo bar"
45
1.09.2015 13:50:43
Начиная с версии 3.0.0 , в Lo-Dash этот строковый метод доступен по умолчанию. Так же, как описано в этом ответе _.capitalize("foo") === "Foo".
bardzusny 9.04.2015 19:09:20
Также есть полезная функция underscore.js humanize. Он преобразует подчеркнутую, верблюжью или разбитую строку в гуманизированную. Также удаляет начальные и конечные пробелы и удаляет постфикс «_id».
Stepan Zakharov 7.05.2015 14:11:33
Начиная с версии 4 *, Lodash также строчные буквы () все остальные буквы, будьте осторожны!
Igor Loskutov 13.02.2016 08:33:28

Вот моя версия, я думаю, что это легко понять и элегантно.

var str = "foo bar baz";

// capitalize
str.split(' ')
 .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
 .join(' ')
// returns "Foo Bar Baz"

// capitalize first letter
str.charAt(0).toUpperCase() + str.slice(1)
// returns "Foo bar baz"
15
20.10.2019 08:21:57

Вот что я использую неукоснительно:

function capitalizeMe(str,force){
    str=force ? str.toLowerCase() : str;  
    return str.replace(/(\b)([a-zA-Z])/g,
    function(firstLetter){
        return firstLetter.toUpperCase();
    });
}

var firstName = capitalizeMe($firstName.val());
3
7.08.2014 10:31:41
На мой взгляд, это выглядит грубо - на самом деле, я думаю, что добавить флаг к любому методу, чтобы заставить его выполнять другое поведение, немного глупо. Учтите, var s = capitalizeMe('some RANDOM string', true);что читатель вашего кода не узнает, что это trueзначит, не читая реализацию функции. Если вы хотите, чтобы ваша функция делала что-то еще, запишите ее в другую функцию вместо того, чтобы перегружать метод магическими флагами или параметрами.
nevelis 23.10.2014 04:50:40

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

var str = "ruby java";

console.log(str.charAt(0).toUpperCase() + str.substring(1));

Он выведет "Ruby java"на консоль.

46
13.06.2019 23:11:38
Одноканальное решение.
Ahmad Sharif 18.03.2020 15:33:54