webdevqa.jp.net

JavaScriptで文字列の最初の文字を大文字にするにはどうすればよいですか?

文字列の最初の文字を大文字にするが、他の文字の大文字と小文字を変更しないにはどうすればよいですか。

例えば:

  • "this is a test" - > "This is a test"
  • "the Eiffel Tower" - > "The Eiffel Tower"
  • "/index.html" - > "/index.html"
3360
Robert Wills
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

他のいくつかの回答はString.prototypeを変更します(この回答も以前はそうでした)が、保守性のため(これがprototypeに追加されている場所を見つけるのは難しい)ブラウザは、同じ名前のネイティブ関数を将来追加します。

5140
Steve Harrison

よりオブジェクト指向のアプローチ:

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

その後:

"hello world".capitalize();  =>  "Hello world" 
1250
Steve Hansell

CSSでは:

p:first-letter {
    text-transform:capitalize;
}
460
sam6ber

これは、文字列を配列として扱うことによって最初の文字を取得する一般的な回答の短縮版です。

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);
}
252
joelvh

投稿されたいくつかの異なるメソッドのパフォーマンスに興味があるなら:

これが このjsperfテスト に基づいた最速の方法です。

ご覧のとおり、最初の2つの方法はパフォーマンスの点ではほぼ同等ですが、String.prototypeを変更するのはパフォーマンスの点でははるかに遅いです。

// 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);
}

enter image description here

150
Josh Crozier

これが最良の解決策です:

最初の解決策 CSSの場合:

p {
  text-transform: capitalize;
}

第二の解決策

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

あなたはそれをString.prototypeに追加することもできますので、他のメソッドとチェーンすることができます。

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

そしてこれを次のように使います。

'string'.capitalizeFirstLetter() // String

第3の解決策

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).toLowerCase();
    }
    return pieces.join(" ");
}
139
Kamil Ibadov

別のケースでは、最初の文字を大文字にし、残りを小文字にする必要があります。次のような場合にこの機能を変更しました。

//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();
138
alejandro
var string = "hello world";
string = string.charAt(0).toUpperCase() + string.slice(1);
alert(string);
63
Anup

文字列内のすべての単語の最初の文字を大文字にします。 

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(" ");
}
59
Dan

これは2018 ES6 +ソリューションです

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

56
Sterling Bourne

既にlodashを使用している(または検討している)場合、解決策は簡単です。

_.upperFirst('fred');
// => 'Fred'

_.upperFirst('FRED');
// => 'FRED'

_.capitalize('fred') //=> 'Fred'

彼らのドキュメントを参照してください: https://lodash.com/docs#capitalize

_.camelCase('Foo Bar'); //=> 'fooBar'

https://lodash.com/docs/4.15.0#camelCase

_.lowerFirst('Fred');
// => 'fred'

_.lowerFirst('FRED');
// => 'fRED'

_.snakeCase('Foo Bar');
// => 'foo_bar'

最初の大文字はVanilla jsです。

function upperCaseFirst(str){
    return str.charAt(0).toUpperCase() + str.substring(1);
}
50
chovy
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"

ただ楽しいのために、Nov.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
Abdennour TOUMI

私たちは私のお気に入りのRegExpのうちの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();
  });
};
45
yckart

underscore.js または Lo-Dash を使用する場合、 underscore.string ライブラリは、大文字化を含む文字列拡張子を提供します。

_.capitalize(string)文字列の最初の文字を大文字に変換します。

例:

_.capitalize("foo bar") == "Foo bar"
43
andersh

CSSのみ

p::first-letter {
  text-transform: uppercase;
}
  • ::first-letter と呼ばれていますが、最初の 文字 に適用されます。つまり、文字列%aの場合、このセレクターは%に適用され、aは大文字になりません。
  • IE9 +またはIE5.5 +では、1つのコロン(:first-letter)のみを使用して従来の表記法でサポートされています。

ES2015ワンライナー

多数の答えがありますが、ES2015には元の問題を効率的に解決するものはないので、私は次のことを思いつきました。

const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);

備考

  • parameters => functionは、いわゆる 矢印関数 です。
  • OPが文字列全体の最初の文字を大文字にするコードを要求しなかったので、私はcapitalizeFirstCharの代わりにcapitalizeFirstLetterという名前を使いました。
  • constは私たちにcapitalizeFirstCharを定数として宣言する能力を与えてくれます、プログラマとしてあなたは常にあなたの意図を明示的に述べるべきですから。
  • 私が実行したベンチマークでは、string.charAt(0)string[0]の間に大きな違いはありませんでした。ただし、string[0]は空の文字列の場合はundefinedになるため、string && string[0]に書き換える必要があります。これは、他の方法と比較して冗長すぎる場合があります。
  • string.substring(1)string.slice(1)より速いです。

基準

  • このソリューションでは4,956,962 ops/s±3.03%、
  • 4,577,946 ops/s最も投票された回答に対して±1.2%。
  • Google Chrome 57上で JSBench.me で作成されました。

Solutions' comparison

37
Przemek
var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);
37
zianwar

CSS firstを使用してこれらの種類のものを処理することは常に良いです、一般的に、CSSを使用して何かを解決できる場合は、まずそれを実行し、次にJavaScriptを試して問題を解決します。 :first-letter CSSで適用し、text-transform:capitalize;を適用

したがって、そのためのクラスを作成してみてください。そうすれば、グローバルに使用できます。たとえば、.first-letter-uppercaseで、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'

何度も何度も再利用したい場合は、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'
37
Alireza

CSSのほうが簡単なようです。 

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

これはCSS text-transformプロパティ(at W3Schools )からです。

35
Ryan

すべて大文字のテキストを再フォーマットしたい場合は、他の例を次のように変更します。 

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

これにより、次のテキストが確実に変更されます。

TEST => Test
This Is A TeST => This is a test
35
monokrome
function capitalize(s) {
    // returns the first letter capitalized + the string from index 1 and out aka. the rest of the string
    return s[0].toUpperCase() + s.substr(1);
}


// examples
capitalize('this is a test');
=> 'This is a test'

capitalize('the Eiffel Tower');
=> 'The Eiffel Tower'

capitalize('/index.html');
=> '/index.html'
33
Fredrik A.

これが ucfirst() という関数です(「大文字の最初の文字」の略)。

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

ucfirst( "some string") - を呼び出すことで文字列を大文字にすることができます。例えば、

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

弦を2つに分割することで機能します。最初の行では firstLetter を取り出し、次に2番目の行では firstLetter.toUpperCase() を呼び出すことによって firstLetter を大文字にし、それを残りの文字列と結合します。 str.substr(1) を呼び出します。

あなたはこれが空の文字列のために失敗すると思うかもしれません、そして確かにCのような言語ではあなたはこれに応える必要があるでしょう。しかしJavaScriptでは、空の文字列の部分文字列を取得すると、空の文字列が返されるだけです。

27
Robert Wills
String.prototype.capitalize = function(){
    return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase();
    } );
};

使用法:

capitalizedString = someString.capitalize();

これはテキスト文字列です=>これはテキスト文字列です

27
var str = "test string";
str = str.substring(0,1).toUpperCase() + str.substring(1);
26
Salim

この解決策をチェックしてください。 

var stringVal = 'master';
stringVal.replace(/^./, stringVal[0].toUpperCase()); // returns Master 
20
Raju Bera

replace で実装するのはとても簡単な方法です。 ES6の場合:

'foo'.replace(/^./, str => str.toUpperCase())

結果:

'Foo'
19
Little Roys
yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });

(頻繁に使用する場合は、関数にカプセル化したり、Stringプロトタイプに追加したりすることもできます。)

18
Simon

このようにすればucfirst関数は機能します。

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

J-Pさん、おめでとうございます。

16
raphie

あなたはこのように一行でそれをすることができます

string[0].toUpperCase() + string.substring(1)
14
Qwerty
yourString.replace(/\w/, c => c.toUpperCase())

私はこの矢印機能が最も簡単だとわかりました。 置換 は、文字列の最初の文字(\w)に一致し、それを大文字に変換します。必要なものは何もありません。

14
Wolf

機能的アプローチ

const capitalize = ([s, ...tring]) =>
  [s.toUpperCase(), ...tring]
    .join('');

それなら

const titleCase = str => 
  str
    .split(' ')
    .map(capitalize)
    .join(' ')
12
Benny Powers

CoffeeScript で、文字列のプロトタイプに追加します。

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

使い方は次のようになります。

"woobie".capitalize()

どの収率:

"Woobie"
12
longda
// Uppercase first letter
function ucfirst(field) {
    field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}

使用法:

<input type="text" onKeyup="ucfirst(this)" />
11
Pnobuts
function capitalize(string) {
    return string.replace(/^./, Function.call.bind("".toUpperCase));
}
11
Nicolò
var str = "Ruby Java";

alert(str.charAt(0).toUpperCase() + str.substring(1));

"Ruby Java"が返されます

http://jsfiddle.net/amitpandya/908c8e2v/ /

jsfiddleの結果リンク

11
AMIC MING

@ salimの答えを編集してロケール文字変換を含める。

var str = "test string";
str = str.substring(0,1).toLocaleUpperCase() + str.substring(1);
11
ilter

プロトタイプを使う

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

または関数を使う

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

CoffeeScript 

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

Stringプロトタイプメソッドとして:

String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
9

1つの可能な解決策:

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

これを使って:

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

ここで働いています JS Fiddle

9
Zaheer Ahmed

この解決策は新しくておそらく最も単純かもしれません。

function firstUpperCase(input)
{
    return input[0].toUpperCase()+input.substr(1);
}

console.log(firstUpperCase("capitalize first letter"));

9
BILAL AHMAD

s文字列が""nullおよびundefinedの場合、 _最短_ 3の解決策、1および2の処理方法

 s&&s[0].toUpperCase()+s.slice(1)        // 32 char

 s&&s.replace(/./,s[0].toUpperCase())    // 36 char - using regexp

'foo'.replace(/./,x=>x.toUpperCase())    // 31 char - direct on string, ES6

s = 'foo bar'の場合

'Foo bar'
8

私はに関連する問題の既存の答えには何も言及しませんでした アストラルプレーンのコードポイントまたは 国際化「大文字」は、特定のスクリプトを使用しているすべての言語で同じことを意味するわけではありません。

当初、私はアストラルプレーンのコードポイントに関連した問題についての答えを見たことがありませんでした。そこに があります それは少し埋められています(このようになると思います)  


提案された関数のほとんどはこのように見えます:

function capitalizeFirstLetter(str) {
  return str[0].toUpperCase() + str.slice(1);
}

ただし、いくつかの大文字小文字の区別がBMP(基本多言語平面、コードポイントU + 0からU + FFFF)の範囲外です。たとえば、次のDeseretテキストを見てください。

capitalizeFirstLetter("????????????????????????"); // "????????????????????????"

文字列の配列インデックス付きプロパティは文字またはコードポイントにアクセスしないため、ここでの最初の文字は大文字になりません。それらはUTF-16コード単位にアクセスします。これはスライス時にも当てはまります - インデックス値はコード単位を指します。

UTF-16コード単位は、U + 0からU + D7FFまで、およびU + E000からU + FFFFまでの2つの範囲のコードポイントのコードポイントに対して1:1です。大部分の大文字小文字はこれら2つの範囲に入りますが、すべてではありません。

ES2015以降、これに対処するのが少し簡単になりました。 String.prototype[@@iterator]は、コードポイント*に対応する文字列を生成します。だから、例えば、私たちはこれを行うことができます:

function capitalizeFirstLetter([ first, ...rest ]) {
  return [ first.toUpperCase(), ...rest ].join('');
}

capitalizeFirstLetter("????????????????????????") // "????????????????????????"

長い文字列の場合、これはおそらくそれほど効率的ではありません** - 残りを繰り返す必要はありません。最初の(可能な)文字を取得するためにString.prototype.codePointAtを使用することもできますが、それでもスライスの開始位置を決定する必要があります。残りを繰り返さないようにする1つの方法は、最初のコードポイントがBMPの外側にあるかどうかをテストすることです。そうでなければ、スライスは1から始まり、そうであれば、スライスは2から始まります。

function capitalizeFirstLetter(str) {
  const firstCP = str.codePointAt(0);
  const index = firstCP > 0xFFFF ? 2 : 1;

  return String.fromCodePoint(firstCP).toUpperCase() + str.slice(index);
}

capitalizeFirstLetter("????????????????????????") // "????????????????????????"

ES5以下でも、必要に応じてそのロジックをもう少し進めることで、この作業を行うことができます。 ES5にはコードポイントを処理するための組み込みメソッドはありません。そのため、最初のコードユニットが代理***であるかどうかを手動でテストする必要があります。

function capitalizeFirstLetter(str) {
  var firstCodeUnit = str[0];

  if (firstCodeUnit < '\uD800' || firstCodeUnit > '\uDFFF') {
    return str[0].toUpperCase() + str.slice(1);
  }

  return str.slice(0, 2).toUpperCase() + str.slice(2);
}

capitalizeFirstLetter("????????????????????????") // "????????????????????????"

はじめに、国際化についても検討しました。これらの中には、 what languageが使われているだけでなく、その言語の単語についての特定の知識も必要とするため、説明が非常に難しいものがあります。たとえば、アイルランドの有向グラフ "mb"はWordの先頭では "mB"と大文字になりますが、ドイツ語のeszettは決してWordを開始しません(afaik)が、ドイツ語の "SS"から小文字にするには追加の知識が必要です。 "ss"またはWordによっては "ß"になります。

この問題の最も有名な例は、おそらく、トルコ語です。トルコ語ラテン語では、iの大文字はİ、小文字のIはıです。これらは2つの異なる文字です。幸い、これを説明する方法があります。

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

capitalizeFirstLetter("italya", "en") // "Italya"
capitalizeFirstLetter("italya", "tr") // "İtalya"

ブラウザでは、ユーザーの最も推奨される言語タグはnavigator.languageで示され、優先順のリストはnavigator.languagesにあり、指定されたDOM要素の言語はObject(element.closest('[lang]')).lang || YOUR_DEFAULT_HEREで取得できます。


たぶん、この質問をする人々はDeseretの大文字化や国際化には関係ないでしょう。しかし、これらの問題に注意するのは良いことです。たとえそれらが現在心配していなくても、結局あなたがそれらに遭遇する可能性があるからです。それは「Edge」の場合ではなく、むしろ 定義によって Edgeの場合ではありません - とにかくほとんどの人がトルコ語を話す国があり、コード単位とコードポイントを組み合わせることはかなり一般的ですバグの原因(特に絵文字に関して)。文字列も言語もかなり複雑です。


*または孤立した場合は代理コード単位

**多分。テストしていません。大文字と小文字の区別が意味のあるボトルネックであると判断したのでなければ、おそらくそれに汗をかくことはないでしょう。

***最初のユニットは孤立したサロゲートである可能性があるので、このような関数は最初のコードユニットではなく最初のコードユニットと2番目のコードユニットの両方をテストしたいかもしれません。たとえば、入力 "\ uD800x"はXをそのまま大文字にしますが、これは予期される場合とされない場合があります。

8
Semicolon

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

let a = 'hello',
    fix = a.slice(0,1).toUpperCase()+a.slice(1)
    
console.log(fix)

8
Thielicious

これは私のバージョンです、私はそれが理解するのが簡単でエレガントでもあると思います。

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"
8
a8m

または Sugar.jscapitalize() を使用することもできます。

例:

'hello'.capitalize()           -> 'Hello'
'hello kitty'.capitalize()     -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'
7
andersh

これを行うには、いくつかの方法があります。

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());

また、これは[email protected]#$%^&*()}{{[];':",.<>/?のような特殊文字で始まる単語のような例で述べたように否定的なシナリオの世話をします。

7
Mradul Pandey

あなたが正規表現の答えの1つと行くならば、それらがASCII文字でだけ働くであろうことを覚えていてください。あなたのすべてのUnicode文字は大文字になりません。 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

これは、ダッシュで区切られた単語(フランス語の一部の名前のように)を含む、先頭の文字、または各単語の先頭の文字のみを大文字にすることができるユニバーサル関数を作成する私の試みです。

デフォルトでは、この関数は最初の文字だけを大文字にし、残りはそのまま残します。

パラメーター

lc true 残りの単語を小文字にする all 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);
        }
    }
}
6
var capitalizeMe = "string not starting with capital"

Substrで大文字にする

var capitalized = capitalizeMe.substr(0, 1).toUpperCase() + capitalizeMe.substr(1);
6
Asad Fida

最初の文字を大文字にし、残りの文字列を小文字にするだけの場合

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.");

結果は次のようになります。

これはすべて大文字になります。

edit:Peter Mortensenにedit :)をありがとう 

6
Hadnazzar

いいね:

function capitalize(string,a) {
    var tempstr = string.toLowerCase();
    if (a == false || a == undefined)
        return tempstr.replace(tempstr[0], tempstr[0].toUpperCase());
    else {
        return tempstr.split(" ").map(function (i) { return i[0].toUpperCase() + i.substring(1) }).join(" ");
    }
}


capitalize('stack overflow yeah!',true)); //Stack Overflow Yeah!

capitalize('stack stack stack stack overflow yeah!'));//Stack overflow yeah!

https://jsfiddle.net/dgmLgv7b/ /

5
ISFO

ちょっとした改善 - タイトルケースのすべての単語。

String.prototype.toTitleCase = function(){
    return this.replace(/\b(\w+)/g, function(m,p){ return p[0].toUpperCase() + p.substr(1).toLowerCase() });
}

var s = 'heLLo wOrLD';
console.log(s.toTitleCase()); // Hello World
5
Timur

ワンライナー:

'string'.replace(/(^[a-z])/,function (p) { return p.toUpperCase(); } )

5
szanata

さて、私は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);

出力: "私はSmartypantsです...";

5
Alex

まず、この文脈で大文字を使用することの意味を明確にしたかっただけです。 "ThisStringIsCapitalized " 信頼できるソース

これがOPが探しているものではない場合、この例からわかります。それは「文字列の最初の文字を大文字にする方法」(文字列を大文字にしない

function ucfirst (str) {
    return typeof str !="undefined"  ? (str += '', str[0].toUpperCase() + str.substr(1)) : '' ;
}

説明した

typeof str !="undefined" // is str set
? // true 
str += '' // turn the string variable into a string 
str[0].toUpperCase() //get the first character and make it upper case
+ // add
str.substr(1) // string starting from the index 1 ( starts at 0) 
: // false 
''; //return empty string

これは、引数を指定しても、引数を指定しなくても機能します。

undefined         === ""
""                === ""
"my string"       === "My string"
null              === "Null"
undefined         === "";
false             === "False"
0                 === "0"
true              === "True"
[]                === ""
[true,0,"",false] === "True,0,,false"
5
TarranJones

function capitalizeEachWord(str) {
    return str.replace(/\w\S*/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}

document.write(capitalizeEachWord('foo BAR God bAD'));

4
Eduardo Cuomo

これは簡単です

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

私はjQueryを使用して同じことをしようとしています(つまり、入力されている間、文字列の最初の文字を大文字にする)私はウェブ上で答えを探しましたが、見つけることができませんでした。しかし、私はjQueryでon()関数を使用することで回避することができました。

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

データ入力者が継続的に入力している間、この関数は実際には最初の文字を大文字にします。

3
user28864

これも同じ動作をします。

var newStr = string.slice(0,1).toUpperCase() + string.slice(1);
3
Irfan Syed

この質問に対する57の異なる回答、いくつかの話題外、そしてまだそれらのどれもが多くのブラウザでアジアの文字、絵文字、そして他の高いUnicodeポイント値の文字でうまくいかないという重要な問題を提起しません。これが解決策です。

const capitalizeFirstLetter = String.fromCodePoint(65536).length === 1 ?
    function(S) {
        "use-strict"; // Hooray! The browser uses UTF32!
        return S.charAt(0).toUpperCase() + string.slice(1);
    } : function(S) {
        "use-strict";
        // the browser is using UCS16 to store UTF16
        return (S.codePointAt(0) > 65535 ? 
            S.slice(0,2).toUpperCase() + string.slice(2) :
            S.codePointAt(0).toUpperCase() + string.slice(1)
        );
    };

ただし、IEでは機能しません(ただし、Edgeでは機能します)。だから、Microsoftがまもなくwindows 7を打ち切りにしても、これはそれほど問題ではないはずです。

3
Jack Giffin

プロジェクトにLodashがある場合は、upperFirstを使用してください。

2
medik

これがいいときれいなバージョンです。

var str = '';
return str.replace(new RegExp('^'+str[0]+''), str[0].toUpperCase());

結果:

これはテストです - >これはテストです

2
Shivam Gupta

RamdaJを使用したAnotehrの方法、関数型プログラミングの方法

firstCapital(str){
    const fn= p=> R.toUpper(R.head(p))+R.tail(p);
    return fn(str);
  }

文字列に複数の単語がある

firstCapitalAllWords(str){
    const fn = p=> R.toUpper(R.head(p))+R.tail(p);
    return R.map(fn,R.split(' ',str)).join(' ');
}
2
Abhishek Maurya
function cap(input) {
    return input.replace(/[\.\r\n\t\:\;\?\!]\W*(\w)/g, function(match, capture) {
                  // for other sentences in text
                  return match.toUpperCase();
                 }).replace(/^\W*\w/, function(match, capture) {
                 // for first sentence in text
                  return match.toUpperCase();
                 });;
}

var a = "hi, dear user. it is a simple test. see you later!\r\nbye";
console.log(cap(a));
//output: Hi, dear user. It is a simple test. See you later!
//Bye
2
SalmanAA

HTTPのようなAPIを扱うときは、私の開発環境のespでこれらの行に沿って何かを使います。

名前の最初の1文字をすべて大文字にし、その構成語の間にハイフンを追加するHTTPヘッダーがあるとします。この基本的な単純なルーチンを使用して、次のようなことを実現できます。

'access control allow Origin'
    .replace(/\b\w/g, function (match) {
        return match.toUpperCase();
    })
    .split(' ')
    .join('-');

// Output: 'Access-Control-Allow-Origin'

それはおそらく最もエレガントで魅力的な関数定義ではありませんが、それは確かに仕事を成し遂げます。

1
Mr. X

これが私が宗教的に使っていることです。 

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());
1
kaleazy

メソッドは値を受け取り、それを分割して文字列の配列を取得します。

const firstLetterToUpperCase = value => {
 return value.replace(
    value.split("")["0"], // Split stirng and get the first letter 
    value
        .split("")
        ["0"].toString()
        .toUpperCase() // Split string and get the first letter to replace it with an uppercase value
  );
};
1

私は、機能的な方法(例:マッピング配列)を指向したソリューションを使用することを好みます。 

Array.from(str).map((letter, i) => i === 0 ? letter.toUpperCase() : letter ).join('');
1
alejoko
var a = "this is a test"
console.log(a.replace(/^[a-z]/g, txt => txt.toUpperCase()));
1

メソッドがObjectfunctionなどの予期しないタイプのデータで渡されると、すべての答えがクラッシュします。

そのため、どのような状況でもクラッシュしないように、型を確認する必要があります。

capitalizeFirstLetter = string => {
  if (typeof string == "string") {
      console.log("passed");
    return string.charAt(0).toUpperCase() + string.slice(1);
  } else {
    console.log("error");
    return string;
  }
};

//type function
console.log(
  capitalizeFirstLetter(() => {
    return true;
  })
);
// error
//  () => { return true; }

//type object
console.log(capitalizeFirstLetter({ x: 1 }));
// error
// Object { x: 1 }

//type boolean
console.log(capitalizeFirstLetter(true));
// error
// true

//type undefined
console.log(capitalizeFirstLetter(undefined));
// error
// undefined

//type null
console.log(capitalizeFirstLetter(null));
// error
// null

//type NaN
console.log(capitalizeFirstLetter(NaN));
// error
// NaN

//type number
console.log(capitalizeFirstLetter(2));
// error
// 2

//type any for e.g. class
class Jaydeep {}
console.log(capitalizeFirstLetter(new Jaydeep()));
// error
// Object {}

//type string
console.log(capitalizeFirstLetter("1"));
console.log(capitalizeFirstLetter("a"));
console.log(capitalizeFirstLetter("@"));
console.log(capitalizeFirstLetter(""));
// 1
// A
// @
//  :empty string
1
Jaydeep Galani

このコードを試してください:

alert("hello".substr(0, 1).toUpperCase() + "hello".substr(1));

それがしているのは、こんにちはそれを大文字にし、残りを追加する際に最初の文字を取ります。

1
user8903269

これは可能性のある先行空白を許容し、文字列の最初の文字のターゲットを見逃しません。したがって、それはスレッドで利用可能なすでに良い解決策を改善するかもしれません。 

str = "   the Eifel Tower";
str.replace(/\w/, str.match(/\w/)[0].toUpperCase());
>> "   The Eifel Tower";

!しかし、空白文字列に対して実行すると「ソフト」エラーが発生します。

+str!=+str ?  str.replace(/\w/, str.match(/\w/)[0].toUpperCase()) : str;
1
Bekim Bacaj

現在投票されている答えは正しいですが、最初の文字を大文字にする前に文字列の長さをトリムしたりチェックしたりしません。

String.prototype.ucfirst = function(notrim) {
    s = notrim ? this : this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');
    return s.length > 0 ? s.charAt(0).toUpperCase() + s.slice(1) : s;
}

最初に文字列がトリミングされないようにnotrim引数を設定します。

'pizza'.ucfirst()         => 'Pizza'
'   pizza'.ucfirst()      => 'Pizza'
'   pizza'.ucfirst(true)  => '   pizza'
1
pizzamonster

完全を期すために、私が言及していない別の方法を追加します。できるからといって、そうすべきだという意味ではありません。コードは配列デストラクタを使用するのでES6が必要です。

const capitalizeFirstLetter = s => {
  const type = typeof s;
  if (type !== "string") {
    throw new Error(`Expected string, instead received ${type}`);
  }

  const [firstChar, ...remainingChars] = s;

  return [firstChar.toUpperCase(), ...remainingChars].join("");
};
1
Puiu

この関数は2つの引数を取ります: start - 開始インデックス; length - Capitalizeへの部分文字列の長さ

    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;
    };
1
Berezh

あなたの文字列を大文字にするためにNodeJS http://stringjs.com/ パッケージのこのモジュールを使ってください 

var S = require('string');
S('jon').capitalize().s; //'Jon'
S('JP').capitalize().s; //'Jp'
1
mfq

TypeScriptの場合

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

最初の文字列の首都を作るには

第一の解決策

"これはテストです" - > "これはテストです"

var Word = "this is a test"
Word[0].toUpperCase();

それは=> "これはテストです"となります /

文字列の最初の単語を作るための第2の解決策

"これはテストです" - > "これはテストです"

function capitalize(str) {

    const Word = [];

    for(let char of str.split(' ')){
        Word.Push(char[0].toUpperCase() + char.slice(1))
    }

    return Word.join(' ');

}

 capitalize("this is a test");

それは=> "これはテストです"となります /

0
bajran

あなたはこのようなことをすることができます:

mode =  "string";
string = mode.charAt(0).toUpperCase() + mode.substr(1,mode.length).toLowerCase();
console.log(string);

これは印刷されます

String

0
Ilyas karim
string = string.replace(string.charAt(0), string.charAt(0).toUpperCase());
0
JC4NT

1行のライナー( "inputStringは任意の文字列に設定できます")inputString.replace(/.{1}/ ,inputString.charAt(0).toUpperCase()) </code>

0
Aditya Joshi

最も簡単な解決策は、

let yourSentence = 'it needs first letter upper case';

yourSentence.charAt(0).toUpperCase() + yourSentence.substr(1);

または

yourSentence.charAt(0).toUpperCase() + yourSentence.slice(1);

または

yourSentence.substr(0, 1).toUpperCase() + yourSentence.substr(1);
0
Jackkobec

たとえば、hello to the worldHello To The Worldになるように、文字列内の every の最初の文字を大文字にする場合は、次のようにします(Steve Harrisonから転用)。

function capitalizeEveryFirstLetter(string) {
    var splitStr = string.split(' ')
    var fullStr = '';

    $.each(splitStr,function(index){
        var currentSplit = splitStr[index].charAt(0).toUpperCase() + splitStr[index].slice(1);
        fullStr += currentSplit + " "
    });

    return fullStr;
}

これを使用して呼び出すことができます:

capitalizeFirstLetter("hello to the world");
0
maudulus