Как сделать первую букву строки заглавной, но не менять регистр остальных букв?
Например:
"это тест"
-> "Это тест"
."Эйфелева башня"
-> "Эйфелева башня"
"/index.html"
-> "/index.html"
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
Некоторые другие ответы модифицируют String.prototype
(этот ответ также использовался), но я бы не советовал этого делать из-за удобства сопровождения (трудно определить, где функция добавляется к prototype
и может вызвать конфликты, если другой код использует то же имя / браузер добавит родную функцию с тем же именем в будущем).
Вот более объектно-ориентированный подход:
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
Вы вызываете функцию, например, так:
"hello world".capitalize();
С ожидаемым результатом:
"Hello world"
Вот сокращенная версия популярный ответ, который получает первое письмо, рассматривая строку как массив:
function capitalize(s)
{
return s[0].toUpperCase() + s.slice(1);
}
Обновление:
Судя по комментариям ниже это не'т работать в IE 7 и ниже.
Обновление 2:
Чтобы избежать "неопределенным" на пустые строки (см. @njzk2'ы комментарий ниже), можно проверить на пустую строку:
function capitalize(s)
{
return s && s[0].toUpperCase() + s.slice(1);
}
Вот несколько самых быстрых методов, основанных на см. Этот тест jsperf тест (от самого быстрого к самому медленному).
Как видим, первые два метода, по сути, являются сопоставимыми с точки зрения производительности, тогда как изменения строки.прототип-это однозначно самый медленный в плане производительности.
// 10,889,187 operations/sec
function capitalizeFirstLetter(string) {
return string[0].toUpperCase() + string.slice(1);
}
// 10,875,535 operations/sec
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
// 4,632,536 operations/sec
function capitalizeFirstLetter(string) {
return string.replace(/^./, string[0].toUpperCase());
}
// 1,977,828 operations/sec
String.prototype.capitalizeFirstLetter = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
В другом случае мне это нужно, чтобы сделать заглавной первую букву в нижнем регистре и все остальное. Следующих случаях заставило меня изменить эту функцию:
//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();
Это в ECMAScript 2018&ампер;усилитель; nbsp;6+ решения:
в
const str = 'the Eiffel Tower';
const newStr = `${str[0].toUpperCase()}${str.slice(1)}`;
console.log('Original String:', str); // the Eiffel Tower
console.log('New String:', newStr); // The Eiffel Tower
в
Прописной первую букву каждого слова в строке:
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(" ");
}
Если вы're уже (или планирует), используя лодашь
, то есть простое решение:
_.upperFirst('fred');
// => 'Fred'
_.upperFirst('FRED');
// => 'FRED'
_.capitalize('fred') //=> 'Fred'
Увидеть их документы: https://lodash.com/docs#capitalize
_.верблюжьего('Foo бар'); //=> 'так: foobar'
https://lodash.com/docs/4.15.0#camelCase
_.lowerFirst('Fred');
// => 'fred'
_.lowerFirst('FRED');
// => 'fRED'
_.snakeCase('Foo Bar');
// => 'foo_bar'
Ванильный JS для первого верхнего регистра:
function upperCaseFirst(str){
return str.charAt(0).toUpperCase() + str.substring(1);
}
Мы могли бы получить первый символ с одним из моих любимых регулярное выражение
, выглядит как милый смайлик: /^./
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();
});
};
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"
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
тогда оприходование("Привет") // Привет
Если вы используете underscore.js или Ло-тире, в подчеркивания.строку библиотека содержит строку с расширениями, включая выгоду:
_.оприходование(строка) преобразует первую букву строки прописные.
Пример:
_.capitalize("foo bar") == "Foo bar"
p::first-letter {
text-transform: uppercase;
}
::первое-буква
, это относится к первому характер, т. е. в случае строка %а
, этот селектор будет применяться к %
и такой а
не будет капитализироваться.:первый-буква
).Поскольку существует множество ответов, но ни один в ES2015, что бы эффективно решить исходную проблему, я придумал следующее:
const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
capitalizeFirstChar
вместо capitalizeFirstLetter
, потому что ОП не'Т попросил код, который капитализирует первую букву в строке, но самый первый чар (если это'ы письмо, конечно).как const
дает нам возможность заявлять capitalizeFirstChar
как постоянное, которое является желательным, так как программист всегда должен ясно заявить о своих намерениях.стринг.используя метод charat(0)
и строка[0]
. Однако, обратите внимание, что строка[0] будет "неопределенным" на пустую строку, так и должно быть переписано на эту строку и усилитель; & строки[0]`, который слишком многословен, по сравнению с альтернативой.Вроде бы проще в CSS:
<style type="text/css">
p.capitalize {text-transform:capitalize;}
</style>
<p class="capitalize">This is some text.</p>
Это из текст в CSS-свойство transform (на W3Schools).
Это's всегда лучше обрабатывать такого рода вещи, используя экране первые, в общем, если вы можете что-то решить с помощью CSS, это сначала, потом попробовать JavaScript, чтобы решить ваши проблемы, поэтому в этом случае попробуйте использовать :первый-буква
в CSS и применить преобразования текста:выгоду;`
Так что попробуйте создать класс для этого, так что вы можете использовать его во всем мире, например: `.первые буквы-прописные и добавить что-то вроде ниже в ваш CSS:
.first-letter-uppercase:first-letter {
text-transform:capitalize;
}
Также альтернативный вариант-это JavaScript, поэтому лучшим будет что-то вроде этого:
function capitalizeTxt(txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1); //or if you want lowercase the rest txt.slice(1).toLowerCase();
}
и назвали это так:
capitalizeTxt('this is a test'); // return 'This is a test'
capitalizeTxt('the Eiffel Tower'); // return 'The Eiffel Tower'
capitalizeTxt('/index.html'); // return '/index.html'
capitalizeTxt('alireza'); // return 'Alireza'
Если вы хотите повторно использовать его снова и снова, это's лучше прикрепить его к JavaScript родные строки, что-то вроде ниже:
String.prototype.capitalizeTxt = String.prototype.capitalizeTxt || function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
и назвать его как ниже:
'this is a test'.capitalizeTxt(); // return 'This is a test'
'the Eiffel Tower'.capitalizeTxt(); // return 'The Eiffel Tower'
'/index.html'.capitalizeTxt(); // return '/index.html'
'alireza'.capitalizeTxt(); // return 'Alireza'
Использование:
в
var str = "ruby java";
console.log(str.charAt(0).toUpperCase() + str.substring(1));
в
Он будет выводить в "Рубина Ява"
в консоли.
Если вы хотите переформатировать заглавными буквами текст, вы могли бы хотеть изменить другие примеры, как например:
function capitalize (text) {
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
Это будет гарантировать, что следующий текст будет изменен:
TEST => Test
This Is A TeST => This is a test
Есть очень простой способ его выполнения замена. Для ECMAScript&ампер;усилитель; nbsp;6:
'foo'.replace(/^./, str => str.toUpperCase())
Результат:
'Foo'