Как сделать первую букву строки заглавной в JavaScript? - PullRequest
3412 голосов
/ 22 июня 2009

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

Например:

  • "this is a test" -> "This is a test"
  • "the Eiffel Tower" -> "The Eiffel Tower"
  • "/index.html" -> "/index.html"

Ответы [ 83 ]

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

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

Пример:

'hello'.capitalize()           -> 'Hello'
'hello kitty'.capitalize()     -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'
9 голосов
/ 08 ноября 2011

CoffeeScript

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

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

String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
9 голосов
/ 14 января 2019

Есть несколько способов сделать это, попробуйте ниже

var lower = 'the Eiffel Tower';
var upper = lower.charAt(0).toUpperCase() + lower.substr(1);

И если вам удобны регулярные выражения, вы делаете вещи следующим образом:

var upper = lower.replace(/^\w/, function (chr) {
  return chr.toUpperCase();
});

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

const upper = lower.replace(/^\w/, c => c.toUpperCase());

Также это позаботится о негативных сценариях, как указано в примере, как слова, начинающиеся со специальных символов, таких как !@#$%^&*()}{{[];':",.<>/?.

9 голосов
/ 21 июля 2014

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

var str = "foo bar baz";

//capitalize
str.split(" ").map(function(i){return i[0].toUpperCase() + i.substring(1)}).join(" ");
//return "Foo Bar Baz"

//capitalize first letter
str.charAt(0).toUpperCase() + str.slice(1)
//return "Foo bar baz"
9 голосов
/ 07 августа 2018

a.slice(0,1).toUpperCase()+a.slice(1)

let a = 'hello',
    fix = a.slice(0,1).toUpperCase()+a.slice(1)
    
console.log(fix)
8 голосов
/ 19 июня 2016

Для простой заглавной буквы первой буквы и оставшейся строчной буквы:

function capitalize(str) {
     var splittedEnter = str.split(" ");
     var capitalized;
     var capitalizedResult;
     for (var i = 0 ; i < splittedEnter.length ; i++){
         capitalized = splittedEnter[i].charAt(0).toUpperCase();
         splittedEnter[i] = capitalized + splittedEnter[i].substr(1).toLowerCase();
    }
    return splittedEnter.join(" ");
}

capitalize("tHiS wiLL be alL CapiTaLiZED.");

Результат будет:

Это будет все с большой буквы.

8 голосов
/ 10 марта 2011

Если вы используете один из ответов на регулярные выражения, помните, что они будут работать только с символами 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 () подход.

7 голосов
/ 06 февраля 2014

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

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

Параметры

  • lc : true в нижнем регистре остальных слов
  • все : 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);
        }
    }
}
7 голосов
/ 22 января 2015
var capitalizeMe = "string not starting with capital"

Прописать с помощью субстрата

var capitalized = capitalizeMe.substr(0, 1).toUpperCase() + capitalizeMe.substr(1);
6 голосов
/ 02 мая 2012

Хорошо, я новичок в 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);

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

...