文字列内の単語を大文字にする最良の方法は何ですか?
String.prototype.capitalize = function() {
return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
使用法:
'your string'.capitalize(); // -> 'Your String'
修正 Marco Demaio のソリューションで、先頭にスペースが付いた最初の文字が大文字にならない。
' javascript'.capitalize(); // -> ' Javascript'
国別記号とアクセント付き文字を処理できます。
'бабушка курит трубку'.capitalize(); // -> 'Бабушка Курит Трубку'
'località àtilacol'.capitalize() // -> 'Località Àtilacol'
ADD-ON便利だと思う
String.prototype.capitalize = function(lower) {
return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
'javaSCrIPT'.capitalize(); // -> 'JavaSCrIPT'
'javaSCrIPT'.capitalize(true); // -> 'Javascript'
文字列内の単語を大文字にするための最短の実装は、ES6の矢印関数を使用した次のとおりです。
'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'
ES5互換の実装:
'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'
正規表現は基本的に、指定された文字列内の各Wordの最初の文字と一致し、その文字のみを大文字に変換します。
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
この正規表現は、指定された文字列内の最初の文字と空白が前にあるすべての非空白文字に一致し、その文字のみを大文字に変換します。
ここでは、キャプチャしていないグループを/(?:^|\s)\S/g
のように使用できますが、正規表現内のg
フラグは、とにかく設計によりサブグループをキャプチャしません。
乾杯!
function capitalize(s){
return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};
capitalize('this IS THE wOrst string eVeR');
出力:「これは史上最悪のストリングです」
このソリューションは私に取って代わるものと思われます: https://stackoverflow.com/a/7592235/10438
vsyncが提供する回答 は機能します入力文字列にアクセント記号が付いていない限りです。
理由はわかりませんが、どうやら正規表現の\b
もアクセント付き文字(IE8とChromeでテスト済み)に一致するため、"località"
のような文字列は大文字に変換され、"LocalitÀ"
(à
文字が取得されます)大文字で表記されているため、正規表現はWordの境界と見なします)
アクセント付き文字でも動作するというより一般的な関数は次のとおりです。
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
次のように使用できます。
alert( "hello località".toCapitalize() );
(jQuery名声の)John Resigは、John Gruberによって書かれたPerlスクリプトをJavaScriptに移植しました。このスクリプトは、よりインテリジェントな方法で大文字を使用します。たとえば、「of」や「and」などの小さな単語は大文字にしません。
ここにあります: JavaScriptでのタイトルの大文字表記
JavaScriptとhtmlを使用する
String.prototype.capitalize = function() {
return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
<form name="form1" method="post">
<input name="instring" type="text" value="this is the text string" size="30">
<input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
<input name="outstring" type="text" value="" size="30">
</form>
基本的に、string.capitalize()
を実行でき、各Wordの1文字ごとに大文字を使用します。
ソース: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
誰もがあなたが求めたJavaScriptの答えをあなたに与えたので、CSSプロパティtext-transform: capitalize
がまさにこれを行うことをスローします。
私はこれを理解していますかもしれないあなたが求めているものではありません-あなたはこれを実行しているコンテキストを私たちに与えていません-しかしそれがプレゼンテーションのためだけであれば、私は間違いなく行きますCSSの代替を使用します。
console.log( _.capitalize('ÿöur striñg') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
ES6の簡潔な方法は、このように見えるかもしれません。
const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)
これはfirst letterのみを大文字にし、残りの文の大文字小文字には影響しません。
私の解決策:
String.prototype.toCapital = function () {
return this.toLowerCase().split(' ').map(function (i) {
if (i.length > 2) {
return i.charAt(0).toUpperCase() + i.substr(1);
} else {
return i;
}
}).join(' ');
};
例:
'álL riGht'.toCapital();
// Returns 'Áll Right'
これはほとんどの基本的なユースケースをカバーするはずです。
const capitalize = (str) => {
if (typeof str !== 'string') {
throw Error('Feed me string')
} else if (!str) {
return ''
} else {
return str
.split(' ')
.map(s => {
if (s.length == 1 ) {
return s.toUpperCase()
} else {
const firstLetter = s.split('')[0].toUpperCase()
const restOfStr = s.substr(1, s.length).toLowerCase()
return firstLetter + restOfStr
}
})
.join(' ')
}
}
capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week
編集:マッピングの読みやすさを改善しました。
次を使用して、文字列内の単語を大文字にできます。
function capitalizeAll(str){
var partes = str.split(' ');
var nuevoStr = "";
for(i=0; i<partes.length; i++){
nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim();
}
return nuevoStr;
}
JqueryまたはJavasciptは、これを実現するための組み込みメソッドを提供していません。
CSSテストトランスフォーム(text-transform:capitalize;)は、文字列のデータを実際に大文字にしませんが、画面上に大文字のレンダリングを表示します。
単純なvanillaJSを使用してデータレベルでこれを実現するより合法的な方法を探している場合は、このソリューションを使用してください=>
var capitalizeString = function (Word) {
Word = Word.toLowerCase();
if (Word.indexOf(" ") != -1) { // passed param contains 1 + words
Word = Word.replace(/\s/g, "--");
var result = $.camelCase("-" + Word);
return result.replace(/-/g, " ");
} else {
return $.camelCase("-" + Word);
}
}
これを使って:
String.prototype.toTitleCase = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
<p id = "demo"></p>
</div>
Ivoの答えは良いですが、0-9とA-Zを大文字にする必要がないため、\w
で一致させないことを好みます。これらは無視でき、a-zでのみ一致します。
'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'
同じ出力ですが、自己文書化コードの観点からはより明確だと思います。
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html は、多くの回答の1つです。
このような問題に必要なのはGoogleだけです。
ナイーブアプローチは、文字列を空白で分割し、結果の配列の各要素の最初の文字を大文字にして、結合し直すことです。これにより、既存の大文字はそのままになります(たとえば、HTMLはHTMLのままであり、Htmlのような愚かなものにはなりません)。その影響を望まない場合は、分割する前に文字列全体を小文字に変換してください。
このソリューションは正規表現を使用せず、アクセント付き文字をサポートし、ほとんどすべてのブラウザーでサポートされています。
function capitalizeIt(str) {
if (str && typeof(str) === "string") {
str = str.split(" ");
for (var i = 0, x = str.length; i < x; i++) {
if (str[i]) {
str[i] = str[i][0].toUpperCase() + str[i].substr(1);
}
}
return str.join(" ");
} else {
return str;
}
}
使用法:
console.log(capitalizeIt( 'çao2nd inside Javascript programme'));
出力:
Çao2nd Inside Javascript Program
このコードは、ドットの後の単語を大文字にします。
function capitalizeAfterPeriod(input) {
var text = '';
var str = $(input).val();
text = convert(str.toLowerCase().split('. ')).join('. ');
var textoFormatado = convert(text.split('.')).join('.');
$(input).val(textoFormatado);
}
function convert(str) {
for(var i = 0; i < str.length; i++){
str[i] = str[i].split('');
if (str[i][0] !== undefined) {
str[i][0] = str[i][0].toUpperCase();
}
str[i] = str[i].join('');
}
return str;
}
私は簡単なプロセスで行くのが好きです。最初に文字列を配列に変更して簡単に反復し、次にマップ関数を使用して各Wordを必要に応じて変更します。
function capitalizeCase(str) {
var arr = str.split(' ');
var t;
var newt;
var newarr = arr.map(function(d){
t = d.split('');
newt = t.map(function(d, i){
if(i === 0) {
return d.toUpperCase();
}
return d.toLowerCase();
});
return newt.join('');
});
var s = newarr.join(' ');
return s;
}