文字列の最初の文字を大文字にし、他の文字の大文字と小文字を変更しないようにするにはどうすればよいですか?
例えば:
"this is a test"
→"This is a test"
"the Eiffel Tower"
→"The Eiffel Tower"
"/index.html"
→"/index.html"
文字列の最初の文字を大文字にし、他の文字の大文字と小文字を変更しないようにするにはどうすればよいですか?
例えば:
"this is a test"
→"This is a test"
"the Eiffel Tower"
→"The Eiffel Tower"
"/index.html"
→"/index.html"
基本的な解決策は次のとおりです。
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
console.log(capitalizeFirstLetter('foo')); // Foo
他のいくつかの回答は変更String.prototype
されます(この回答も以前は変更されていました)が、保守性のために今はこれに反対することをお勧めします(関数がどこに追加されているかを見つけるのが難しく、prototype
他のコードが同じ名前/ブラウザを使用している場合、競合が発生する可能性があります将来同じ名前のネイティブ関数を追加します)。
...そして、この驚くほど良い答え(以下に埋もれています) が示すように、国際化を考慮すると、この質問にはさらに多くのことがあります。
コード単位の代わりに Unicode コード ポイントを使用する場合 (たとえば、Basic Multilingual Plane の外部で Unicode 文字を処理する場合) はString#[@iterator]
、コード ポイントで機能するという事実を活用できtoLocaleUpperCase
、ロケールに適した大文字を取得するために使用できます。
const capitalizeFirstLetter = ([ first, ...rest ], locale = navigator.language) =>
first.toLocaleUpperCase(locale) + rest.join('')
console.log(
capitalizeFirstLetter('foo'), // Foo
capitalizeFirstLetter(""), // "" (correct!)
capitalizeFirstLetter("italya", 'tr') // İtalya" (correct in Turkish Latin!)
)
さらに多くの国際化オプションについては、以下の元の回答を参照してください。
よりオブジェクト指向のアプローチは次のとおりです。
Object.defineProperty(String.prototype, 'capitalize', {
value: function() {
return this.charAt(0).toUpperCase() + this.slice(1);
},
enumerable: false
});
次のように関数を呼び出します。
"hello, world!".capitalize();
予想される出力は次のとおりです。
"Hello, world!"
CSS で:
p::first-letter {
text-transform:capitalize;
}
文字列を配列として処理して最初の文字を取得する、一般的な回答の短縮版を次に示します。
function capitalize(s)
{
return s[0].toUpperCase() + s.slice(1);
}
以下のコメントによると、これは IE 7 以下では機能しません。
undefined
空の文字列を回避するには (以下の @njzk2 のコメントを参照)、空の文字列を確認できます。
function capitalize(s)
{
return s && s[0].toUpperCase() + s.slice(1);
}
const capitalize = s => s && s[0].toUpperCase() + s.slice(1)
// to always return type string event when s may be falsy other than empty-string
const capitalize = s => (s && s[0].toUpperCase() + s.slice(1)) || ""
この 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);
}
別のケースでは、最初の文字を大文字にし、残りを小文字にする必要があります。次の場合、この機能を変更しました。
//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();
これは 2018 ECMAScript 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
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'
最初の大文字のバニラ JavaScript:
function upperCaseFirst(str){
return str.charAt(0).toUpperCase() + str.substring(1);
}
文字列内のすべての単語の最初の文字を大文字にします。
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(" ");
}
私のお気に入りの1つで最初のキャラクターを手に入れることができまし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();
});
};
これが呼び出される関数です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 つに分割することで機能します。最初の行でそれを取り出し、次に 2 行目でを呼び出しfirstLetter
て大文字化し、 を呼び出して見つけた残りの文字列と結合します。firstLetter
firstLetter.toUpperCase()
str.substr(1)
これは空の文字列では失敗すると思うかもしれません。実際、C のような言語では、これに対応する必要があります。ただし、JavaScript では、空の文字列の部分文字列を取得すると、空の文字列が返されます。
使用する:
var str = "ruby java";
console.log(str.charAt(0).toUpperCase() + str.substring(1));
"Ruby java"
コンソールに出力されます。
すべての単語の最初の文字を大文字にすることに問題がなく、ユースケースが HTML である場合は、次の CSS を使用できます。
<style type="text/css">
p.capitalize {text-transform:capitalize;}
</style>
<p class="capitalize">This is some text.</p>
これは、CSS text-transform プロパティ( W3Schools ) からのものです。
var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);
すべて大文字のテキストを再フォーマットする場合は、他の例を次のように変更することをお勧めします。
function capitalize (text) {
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
これにより、次のテキストが確実に変更されます。
TEST => Test
This Is A TeST => This is a test
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'
String.prototype.capitalize = function(){
return this.replace(/(^|\s)([a-z])/g,
function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
使用法:
capitalizedString = someString.capitalize();
これはテキスト文字列です => これはテキスト文字列です
yourString.replace(/\w/, c => c.toUpperCase())
この矢印関数が最も簡単であることがわかりました。Replaceは、文字列の最初の文字 ( \w
) に一致し、大文字に変換します。手の込んだものは何も必要ありません。
var str = "test string";
str = str.substring(0,1).toUpperCase() + str.substring(1);
このソリューションをチェックしてください:
var stringVal = 'master';
stringVal.replace(/^./, stringVal[0].toUpperCase()); // Returns Master
これは本当にワンライナーであるため、この回答を含めます。これはES6ベースの補間文字列ワンライナーです。
let setStringName = 'the Eiffel Tower';
setStringName = `${setStringName[0].toUpperCase()}${setStringName.substring(1)}`;
yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });
(関数にカプセル化することも、頻繁に使用する場合はStringプロトタイプに追加することもできます。)
このucfirst
ようにすると機能が動作します。
function ucfirst(str) {
var firstLetter = str.slice(0,1);
return firstLetter.toUpperCase() + str.substring(1);
}
宣言してくれてありがとうJP。
これが私のバージョンです。分かりやすくて上品だと思います。
var str = "foo bar baz";
// Capitalize
str.split(' ')
.map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
.join(' ')
// Returns "Foo Bar Baz"
// Capitalize the first letter
str.charAt(0).toUpperCase() + str.slice(1)
// Returns "Foo bar baz"
すでに非常に多くの適切な回答がありますが、単純な CSS 変換を使用することもできます。
text-transform: capitalize;
div.c {
text-transform: capitalize;
}
<h2>text-transform: capitalize:</h2>
<div class="c">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
@salim の回答の編集を投稿して、ロケール文字変換を含めます。
var str = "test string";
str = str.substring(0,1).toLocaleUpperCase() + str.substring(1);
CoffeeScriptで、文字列のプロトタイプに追加します。
String::capitalize = ->
@substr(0, 1).toUpperCase() + @substr(1)
使用法は次のとおりです。
"woobie".capitalize()
どちらが得られますか:
"Woobie"
ucfirst = (str) -> str.charAt(0).toUpperCase() + str.slice(1)
String プロトタイプ メソッドとして:
String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
// Uppercase first letter
function ucfirst(field) {
field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}
使用法:
<input type="text" onKeyup="ucfirst(this)" />
考えられる解決策の 1 つ:
function ConvertFirstCharacterToUpperCase(text) {
return text.substr(0, 1).toUpperCase() + text.substr(1);
}
これを使って:
alert(ConvertFirstCharacterToUpperCase("this is string"));
または、 Sugar.js capitalize()を使用できます
例:
'hello'.capitalize() -> 'Hello'
'hello kitty'.capitalize() -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'
これを行うには複数の方法があります。以下でいくつか試してください
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());
また、これは、のような特殊文字で始まる単語の例で述べたように、否定的なシナリオを処理します!@#$%^&*()}{{[];':",.<>/?
。
これは、最初の文字のみ、またはダッシュで区切られた単語 (フランス語の名前など) を含む各単語の最初の文字のみを大文字にできるユニバーサル関数を作成する試みです。
デフォルトでは、関数は最初の文字のみを大文字にし、残りはそのままにします。
パラメータ:
if( typeof String.prototype.capitalize !== "function" ) {
String.prototype.capitalize = function( lc, all ) {
if( all ) {
return this.split( " " )
.map( currentValue => currentValue.capitalize( lc ), this )
.join( " " )
.split( "-" )
.map( currentValue => currentValue.capitalize( false ), this )
.join( "-" );
} else {
return lc
? this.charAt( 0 ).toUpperCase() + this.slice( 1 ).toLowerCase()
: this.charAt( 0 ).toUpperCase() + this.slice( 1 );
}
}
}
プロトタイプの使用
String.prototype.capitalize = function () {
return this.charAt(0) + this.slice(1).toLowerCase();
}
または関数の使用
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
正規表現の回答のいずれかを使用する場合は、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() アプローチを使用する方が簡単なようです。
このコードは、文字列の最初と最後にある余分なスペースも処理します。
let val = ' this is test ';
val = val.trim();
val = val.charAt(0).toUpperCase() + val.slice(1);
console.log("Value => ", val);
最初の文字を大文字にし、残りの文字列を小文字にする場合:
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.");
結果は次のようになります。
これはすべて大文字になります。
さて、私は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 です...";
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'));
小さな改善 - タイトルケースのすべての単語。
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!
私は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());
}
});
この関数は、データ入力者が連続して入力している間、実際には最初の文字を大文字にします。
特に HTTP などの API を使用する場合は、開発環境で次のようなものを使用します。
名前の最初の文字をすべて大文字にし、構成単語の間にハイフンを追加したい HTTP ヘッダーがあるとします。この基本的で単純なルーチンを使用して、そのようなことを達成できます。
'access control allow origin'
.replace(/\b\w/g, function (match) {
return match.toUpperCase();
})
.split(' ')
.join('-');
// Output: 'Access-Control-Allow-Origin'
これはおそらく最もエレガントで魅力的な関数定義ではありませんが、確実に仕事を成し遂げます。
いいね:
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!
ワンライナー:
'string'.replace(/(^[a-z])/,function (p) { return p.toUpperCase(); } )
これは同じアクションを行います:
var newStr = string.slice(0,1).toUpperCase() + string.slice(1);
現在投票されている回答は正しいですが、最初の文字を大文字にする前に、文字列の長さをトリミングまたはチェックしません。
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'
最初の単語を大文字にする: 最短
text.replace(/(^.)/, m => m.toUpperCase())
各単語を大文字にする: 最短
text.replace(/(^\w|\s\w)/g, m => m.toUpperCase());
残りが小文字であることを確認したい場合:
text.replace(/(^\w|\s\w)(\S*)/g, (_,m1,m2) => m1.toUpperCase()+m2.toLowerCase())
これは私が宗教的に使用するものです:
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());
あなたはそのようにする必要があります:
let text = "lower case";
text = text.charAt(0).toUpperCase() + text.substring(1, text.length);
検証で最初の文字を大文字にする
function capitalizeFirstLetter(str) {
return (str && typeof str === 'string') ? (str.charAt(0).toUpperCase() + str.slice(1)) : "";
}
テスト
console.log(capitalizeFirstLetter(0)); // Output: ""
console.log(capitalizeFirstLetter(null)); // Output: ""
console.log(capitalizeFirstLetter("test")); // Output: "Test"
console.log(capitalizeFirstLetter({})); // Output: ""
これは先頭の空白の可能性を許容し、文字列の最初の文字のターゲットを見逃すことはありません。したがって、スレッドで利用可能なすでに優れたソリューションが改善される可能性があります。
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;
このコードを試してください:
alert("hello".substr(0, 1).toUpperCase() + "hello".substr(1));
「hello」の最初の文字を大文字にして、残りを追加しています。
Node.js のこのモジュール、http://stringjs.com/パッケージを使用して、文字列を大文字にします。
var S = require('string');
S('jon').capitalize().s; //'Jon'
S('JP').capitalize().s; //'Jp'
たとえば、文字列の最初の文字をすべて大文字にしたい場合hello to the world
はHello To The World
、次を使用できます (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");
「これはテストです」→「これはテストです」
var word = "this is a test"
word[0].toUpperCase();
それは次のようになります:「これはテストです」
「これはテストです」→「これはテストです」
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");
それは次のようになります:「これはテストです」
ここに私が使用する機能があります:
capitalCase(text: string = 'NA') {
return text
.trim()
.toLowerCase()
.replace(/\w\S*/g, (w) => w.replace(/^\w/, (c) => c.toUpperCase()));
}
console.log('this cApitalize TEXt');
以下のように正規表現を使用できます。
return string1.toLowerCase().replace(/^[a-zA-z]|\s(.)/ig, L => L.toUpperCase());
コードを少し変更する場合があります。この関数ですべて大文字の文字列を実行しても、何も起こらないことがわかりました。だから...ここに私のちょっとしたビットがあります。最初に文字列を強制的に小文字にします。
String.prototype.capitalize = function(){
return this.toLowerCase().replace( /(^|\s)([a-z])/g , function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
}