web-dev-qa-db-ja.com

文字列の単語を大文字にします

文字列内の単語を大文字にする最良の方法は何ですか?

148
vsync
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'
209
disfated

文字列内の単語を大文字にするための最短の実装は、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の最初の文字と一致し、その文字のみを大文字に変換します。

  • \ b は、Wordの境界(Wordの先頭または末尾)と一致します。
  • \ w は、次のメタ文字[a-zA-Z0-9]と一致します。

非ASCII文字については、代わりにこのソリューションを参照してください

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

この正規表現は、指定された文字列内の最初の文字と空白が前にあるすべての非空白文字に一致し、その文字のみを大文字に変換します。

  • \ s は空白文字と一致します
  • \ S は空白以外の文字と一致します
  • (x | y) は、指定された選択肢のいずれかに一致します

ここでは、キャプチャしていないグループを/(?:^|\s)\S/gのように使用できますが、正規表現内のgフラグは、とにかく設計によりサブグループをキャプチャしません。

乾杯!

197
Ivo
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

29
vsync

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() );
15
Marco Demaio

(jQuery名声の)John Resigは、John Gruberによって書かれたPerlスクリプトをJavaScriptに移植しました。このスクリプトは、よりインテリジェントな方法で大文字を使用します。たとえば、「of」や「and」などの小さな単語は大文字にしません。

ここにあります: JavaScriptでのタイトルの大文字表記

4
meouw

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

4
Buhake Sindi

誰もがあなたが求めたJavaScriptの答えをあなたに与えたので、CSSプロパティtext-transform: capitalizeがまさにこれを行うことをスローします。

私はこれを理解していますかもしれないあなたが求めているものではありません-あなたはこれを実行しているコンテキストを私たちに与えていません-しかしそれがプレゼンテーションのためだけであれば、私は間違いなく行きますCSSの代替を使用します。

4
David Hedlund

JavaScriptアプリケーションでlodashを使用している場合、 _。capitalize を使用できます。

console.log( _.capitalize('ÿöur striñg') );
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
3
vicke4

ES6の簡潔な方法は、このように見えるかもしれません。

const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)

これはfirst letterのみを大文字にし、残りの文の大文字小文字には影響しません。

1
Otman Zaib

私の解決策:

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'
1
Erick Tatsui

これはほとんどの基本的なユースケースをカバーするはずです。

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

編集:マッピングの読みやすさを改善しました。

1
Drops

次を使用して、文字列内の単語を大文字にできます。

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;

}
0
Marcos Torres

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);
    }
}
0
siwalikm

これを使って:

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>
0
Sanjay

Ivoの答えは良いですが、0-9とA-Zを大文字にする必要がないため、\wで一致させないことを好みます。これらは無視でき、a-zでのみ一致します。

'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'

同じ出力ですが、自己文書化コードの観点からはより明確だと思います。

0
Big Money

http://www.mediacollege.com/internet/javascript/text/case-capitalize.html は、多くの回答の1つです。

このような問題に必要なのはGoogleだけです。

ナイーブアプローチは、文字列を空白で分割し、結果の配列の各要素の最初の文字を大文字にして、結合し直すことです。これにより、既存の大文字はそのままになります(たとえば、HTMLはHTMLのままであり、Htmlのような愚かなものにはなりません)。その影響を望まない場合は、分割する前に文字列全体を小文字に変換してください。

0
Alan Plum

このソリューションは正規表現を使用せず、アクセント付き文字をサポートし、ほとんどすべてのブラウザーでサポートされています。

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

0
Nabarag Paul

このコードは、ドットの後の単語を大文字にします。

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;
}
0
Flavio

私は簡単なプロセスで行くのが好きです。最初に文字列を配列に変更して簡単に反復し、次にマップ関数を使用して各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;
  }
0