web-dev-qa-db-ja.com

JavaScriptで文字列をタイトルケースに変換する

文字列をタイトルケースに変換する簡単な方法はありますか?例えば。 john smithJohn Smithになります。 John Resigの解決策 のような複雑なものを探しているのではない。

476
MDCore

これを試して:

    function toTitleCase(str) {
        return str.replace(
            /\w\S*/g,
            function(txt) {
                return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
            }
        );
    }
<form>
Input:
<br /><textarea name="input" onchange="form.output.value=toTitleCase(this.value)"  onkeyup="form.output.value=toTitleCase(this.value)"></textarea>
<br />Output:
<br /><textarea name="output" readonly onclick="select(this)"></textarea>
</form>
676
Greg Dean

Greg Deanの機能を適応させた、もう少しエレガントな方法です。

String.prototype.toProperCase = function () {
    return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};

ようにそれを呼ぶ:

"Pascal".toProperCase();
185
Tuan

text-transform CSSスタイルをコントロールに適用してみてください。

例:(text-transform: capitalize);

絶対に必要な場合にのみJSアプローチを使用してください。

149
Talha Ashfaque

これは私の関数で、タイトルの大文字小文字に変換しますが、定義された頭字語は大文字、小単語は小文字のままにします。

String.prototype.toTitleCase = function() {
  var i, j, str, lowers, uppers;
  str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });

  // Certain minor words should be left lowercase unless 
  // they are the first or last words in the string
  lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At', 
  'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
  for (i = 0, j = lowers.length; i < j; i++)
    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), 
      function(txt) {
        return txt.toLowerCase();
      });

  // Certain words such as initialisms or acronyms should be left uppercase
  uppers = ['Id', 'Tv'];
  for (i = 0, j = uppers.length; i < j; i++)
    str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'), 
      uppers[i].toUpperCase());

  return str;
}

例えば:

"TO LOGIN TO THIS SITE and watch tv, please enter a valid id:".toTitleCase();
// Returns: "To Login to This Site and Watch TV, Please Enter a Valid ID:"
90
Geoffrey Booth

これが私のバージョンです。IMOは理解しやすくエレガントです。

var str = "foo bar baz"

str.split(' ')
   .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
   .join(' ')

// returns "Foo Bar Baz"
90
a8m

私は他の答えよりも次のほうが好きです。それは各Wordの最初の文字だけに一致しそれを大文字にします。より単純なコード、読みやすく、より少ないバイト数。頭字語が歪むのを防ぐために、既存の大文字を保持します。しかし、あなたは常にあなたの文字列に対してtoLowerCase()を最初に呼び出すことができます。

function title(str) {
  return str.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}

これを文字列プロトタイプに追加すると、次のように'my string'.toTitle()を作成できます。

String.prototype.toTitle = function() {
  return this.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}
32
Tom Kay

参考のために正規表現を使わずに:

String.prototype.toProperCase = function() {
  var words = this.split(' ');
  var results = [];
  for (var i=0; i < words.length; i++) {
      var letter = words[i].charAt(0).toUpperCase();
      results.Push(letter + words[i].slice(1));
  }
  return results.join(' ');
};

'john smith'.toProperCase();
16
Mike

念のために言っておきますが、これらのフィラーワードについて心配しているのであれば、大文字と小文字を区別しないように関数に伝えることができます。

/**
 * @param String str The text to be converted to titleCase.
 * @param Array glue the words to leave in lowercase. 
 */
var titleCase = function(str, glue){
    glue = (glue) ? glue : ['of', 'for', 'and'];
    return str.replace(/(\w)(\w*)/g, function(_, i, r){
        var j = i.toUpperCase() + (r != null ? r : "");
        return (glue.indexOf(j.toLowerCase())<0)?j:j.toLowerCase();
    });
};

これが役に立つことを願っています。

編集する

あなたが主要なのりの単語を処理したいならば、あなたはこのw /もう1つの変数で追跡することができます:

var titleCase = function(str, glue){
    glue = !!glue ? glue : ['of', 'for', 'and', 'a'];
    var first = true;
    return str.replace(/(\w)(\w*)/g, function(_, i, r) {
        var j = i.toUpperCase() + (r != null ? r : '').toLowerCase();
        var result = ((glue.indexOf(j.toLowerCase()) < 0) || first) ? j : j.toLowerCase();
        first = false;
        return result;
    });
};
15
fncomp

上記のソリューションで使用されている正規表現で混乱している場合は、次のコードを試してください。

function titleCase(str) {
  return str.split(' ').map(function(val){ 
    return val.charAt(0).toUpperCase() + val.substr(1).toLowerCase();
  }).join(' ');
}
14
immazharkhan

これは1つのWord文字列に対してのみ機能しますが、それが必要なものです。

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

JSFiddle: https://jsfiddle.net/simo/gou2uhLm/

14
simo

すぐに文字列をtoLowerCaseにしてから、各Wordの最初の文字をtoUpperCaseにすることができます。非常にシンプルな1ライナーになります。

function titleCase(str) {
  return str.toLowerCase().replace(/\b(\w)/g, s => s.toUpperCase());
}

console.log(titleCase('iron man'));
console.log(titleCase('iNcrEdible hulK'));
10
KevBot

"McDonald"、 "MacDonald"、 "O'Toole"、 "D'Orazio"などの姓(タイトルの大文字小文字は区別されません)を処理できるこの関数を作りました。しかし、ドイツ語やオランダ語の "van"や "von"などの名前は小文字では処理できません。 "de"も "Robert de Niro"のように小文字であることが多いと思います。これらはまだ対処されなければならないでしょう。

function toProperCase(s)
{
  return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
          function($1, $2, $3, $4, $5) { if($2){return $3.toUpperCase()+$4+$5.toUpperCase();} return $1.toUpperCase(); });
}
8
Lwangaman

これを試して

String.prototype.toProperCase = function(){
    return this.toLowerCase().replace(/(^[a-z]| [a-z]|-[a-z])/g, 
        function($1){
            return $1.toUpperCase();
        }
    );
};

var str = 'john smith';
str.toProperCase();
7
Maxi Baez
var toMatch = "john w. smith";
var result = toMatch.replace(/(\w)(\w*)/g, function (_, i, r) {
      return i.toUpperCase() + (r != null ? r : "");
    }
)

動作しているように見えます...上記の「素早い茶色のキツネ/ジャンプ/ ^¡ file1.txt "#:。

2ndではなく2Ndが欲しい場合は、/([a-z])(\w*)/gに変更できます。

最初の形式は次のように単純化できます。

function toTitleCase(toTransform) {
  return toTransform.replace(/\b([a-z])/g, function (_, initial) {
      return initial.toUpperCase();
  });
}
7
PhiLho

ES 6

str.split(' ')
   .map(s => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase())
   .join(' ')

else

str.split(' ').map(function (s) {
    return s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase();
}).join(' ')
7
jssridhar

これを試してみてください、最短の方法:

str.replace(/(^[a-z])|(\s+[a-z])/g, txt => txt.toUpperCase());
7
Vikram

私は最も簡単なのはCSSを使うことだと思います。

function format_str(str) {
    str = str.toLowerCase();
    return '<span style="text-transform: capitalize">'+ str +'</span>';
}
6
wondim

これらの回答のほとんどは、Wordの境界メタ文字(\ b)を使用する可能性を無視しているようです。それを利用したグレッグディーンの答えの短いバージョン:

function toTitleCase(str)
{
    return str.replace(/\b\w/g, function (txt) { return txt.toUpperCase(); });
}

Jim-Bobのようなハイフンで囲まれた名前にも使えます。

6
lewax00
"john f. kennedy".replace(/\b\S/g, t => t.toUpperCase())
5
Proximo

発音区別符号をサポートするには、/\S+/gを使用します。

function toTitleCase(str) {
  return str.replace(/\S+/g, str => str.charAt(0).toUpperCase() + str.substr(1).toLowerCase());
}

console.log(toTitleCase("a city named örebro")); // A City Named Örebro

ただし、 " s unshine( y ellow)"⇒ " _ s _ unshine( y ellow)"と入力してください。

5
le_m

あなたがあなたのコードでサードパーティのライブラリを使うことができるなら、lodashは私たちのためにヘルパー関数を持っています。

https://lodash.com/docs/4.17.3#startCase

_.startCase('foo bar');
// => 'Foo Bar'

_.startCase('--foo-bar--');
// => 'Foo Bar'
 
_.startCase('fooBar');
// => 'Foo Bar'
 
_.startCase('__FOO_BAR__');
// => 'FOO BAR'
5
waqas

"lewax00"解を取る私はこの単純な解を作成しました。これは、スペースで始まる "w"またはde Wordを開始する "w"を強制しますが、余分な中間スペースを削除することはできません。

"SOFÍA vergara".toLowerCase().replace(/\b(\s\w|^\w)/g, function (txt) { return txt.toUpperCase(); });

結果は「SofíaVergara」です。

4
Asereware

ここオフィスで議論を行ってきましたが、現在の方法で名前を入力する方法を自動的に修正しようとすると、問題が発生する可能性があります。

異なる種類の自動大文字化がバラバラになるいくつかのケースを考え出しました。これらは英語名だけのためであり、各言語には独自の複雑さがあります。

各名前の最初の文字を大文字にする問題:

•IBMなどの頭字語は入力できません。Ibmになります。

•マクドナルドの名前はマクドナルドに変わりますが、これは間違っています。マクドナルドも同じです。

•マリートンクスなどの二重樽の名前は、マリートンクに変わります。

•O'Connorのような名前はO'Connorに変わります。

これらのほとんどについて、それを処理するカスタムルールを記述できますが、これは以前と同様に頭字語に問題があり、新しい問題が発生します:

•MacDonaldなどのMacで名前を修正するルールを追加すると、Macyなどのブレーク名がMacYに変わります。

私たちが思いついた唯一の解決策は決して間違っていません。すべての文字を大文字にすることです。これは、DBSも使用していると思われるブルートフォース方式です。

したがって、プロセスを自動化する場合は、すべての名前とWordの辞書とそれをどのように要約する必要がないのと同じくらい良いですそれはあなたのユーザーを困らせるだけでなく、他の場所に行くために自分の名前を正しく入力したい人々を促すため、それを使用しないすべてをカバーします。

3
jjr2000

正規表現を怖がっている私達の人々のために(笑):

function titleCase(str)
{
    var words = str.split(" ");
    for ( var i = 0; i < words.length; i++ )
    {
        var j = words[i].charAt(0).toUpperCase();
        words[i] = j + words[i].substr(1);
    }
    return words.join(" ");
}
3
lashja

アクセントのついた文字を世話している機能(フランス語にとって重要です)、そして下位の例外の処理のオン/オフを切り替えることができます。それが役立つことを願っています。

String.prototype.titlecase = function(lang, withLowers = false) {
    var i, string, lowers, uppers;

    string = this.replace(/([^\s:\-'])([^\s:\-']*)/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    }).replace(/Mc(.)/g, function(match, next) {
        return 'Mc' + next.toUpperCase();
    });

    if (withLowers) {
        if (lang == 'EN') {
            lowers = ['A', 'An', 'The', 'At', 'By', 'For', 'In', 'Of', 'On', 'To', 'Up', 'And', 'As', 'But', 'Or', 'Nor', 'Not'];
        }
        else {
            lowers = ['Un', 'Une', 'Le', 'La', 'Les', 'Du', 'De', 'Des', 'À', 'Au', 'Aux', 'Par', 'Pour', 'Dans', 'Sur', 'Et', 'Comme', 'Mais', 'Ou', 'Où', 'Ne', 'Ni', 'Pas'];
        }
        for (i = 0; i < lowers.length; i++) {
            string = string.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), function(txt) {
                return txt.toLowerCase();
            });
        }
    }

    uppers = ['Id', 'R&d'];
    for (i = 0; i < uppers.length; i++) {
        string = string.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'), uppers[i].toUpperCase());
    }

    return string;
}
3
Ouatataz

文法規則 ここに掲載 (Google推奨の記事)を考慮した堅牢なtoTitleCase関数が必要なので、私は自分の答えを追加したいと思いました。入力文字列の長さに応じてさまざまな規則があります。下記は機能+単体テストです。

この機能は空白も統合して特殊文字を削除します(必要に応じて正規表現を修正してください)。

toTitleCase関数

const toTitleCase = (str) => {
  const articles = ['a', 'an', 'the'];
  const conjunctions = ['for', 'and', 'nor', 'but', 'or', 'yet', 'so'];
  const prepositions = [
    'with', 'at', 'from', 'into','upon', 'of', 'to', 'in', 'for',
    'on', 'by', 'like', 'over', 'plus', 'but', 'up', 'down', 'off', 'near'
  ];

  // The list of spacial characters can be tweaked here
  const replaceCharsWithSpace = (str) => str.replace(/[^0-9a-z&/\\]/gi, ' ').replace(/(\s\s+)/gi, ' ');
  const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.substr(1);
  const normalizeStr = (str) => str.toLowerCase().trim();
  const shouldCapitalize = (Word, fullWordList, posWithinStr) => {
    if ((posWithinStr == 0) || (posWithinStr == fullWordList.length - 1)) {
      return true;
    }

    return !(articles.includes(Word) || conjunctions.includes(Word) || prepositions.includes(Word));
  }

  str = replaceCharsWithSpace(str);
  str = normalizeStr(str);

  let words = str.split(' ');
  if (words.length <= 2) { // Strings less than 3 words long should always have first words capitalized
    words = words.map(w => capitalizeFirstLetter(w));
  }
  else {
    for (let i = 0; i < words.length; i++) {
      words[i] = (shouldCapitalize(words[i], words, i) ? capitalizeFirstLetter(words[i], words, i) : words[i]);
    }
  }

  return words.join(' ');
}

正当性を確認するための単体テスト

import { expect } from 'chai';
import { toTitleCase } from '../../src/lib/stringHelper';

describe('toTitleCase', () => {
  it('Capitalizes first letter of each Word irrespective of articles, conjunctions or prepositions if string is no greater than two words long', function(){
    expect(toTitleCase('the dog')).to.equal('The Dog'); // Capitalize articles when only two words long
    expect(toTitleCase('for all')).to.equal('For All'); // Capitalize conjunctions when only two words long
    expect(toTitleCase('with cats')).to.equal('With Cats'); // Capitalize prepositions when only two words long
  });

  it('Always capitalize first and last words in a string irrespective of articles, conjunctions or prepositions', function(){
    expect(toTitleCase('the beautiful dog')).to.equal('The Beautiful Dog');
    expect(toTitleCase('for all the deadly ninjas, be it so')).to.equal('For All the Deadly Ninjas Be It So');
    expect(toTitleCase('with cats and dogs we are near')).to.equal('With Cats and Dogs We Are Near');
  });

  it('Replace special characters with space', function(){
    expect(toTitleCase('[wolves & lions]: be careful')).to.equal('Wolves & Lions Be Careful');
    expect(toTitleCase('wolves & lions, be careful')).to.equal('Wolves & Lions Be Careful');
  });

  it('Trim whitespace at beginning and end', function(){
    expect(toTitleCase(' mario & Luigi superstar saga ')).to.equal('Mario & Luigi Superstar Saga');
  });

  it('articles, conjunctions and prepositions should not be capitalized in strings of 3+ words', function(){
    expect(toTitleCase('The wolf and the lion: a tale of two like animals')).to.equal('The Wolf and the Lion a Tale of Two like Animals');
    expect(toTitleCase('the  three Musketeers  And plus ')).to.equal('The Three Musketeers and Plus');
  });
});

提供された文字列からかなりの数の特殊文字を削除しています。あなたはあなたのプロジェクトの要件に対処するために正規表現を微調整する必要があるでしょう。

3
dipole_moment

問題への私のシンプルで簡単なバージョン:

    function titlecase(str){
    var arr=[];  
    var str1=str.split(' ');
    for (var i = 0; i < str1.length; i++) {
    var upper= str1[i].charAt(0).toUpperCase()+ str1[i].substr(1);
    arr.Push(upper);
     };
      return arr.join(' ');
    }
    titlecase('my name is suryatapa roy');
2
Suryatapa

これはcss(および変換したいテキストが大文字の場合はjavascript)を使用した別の解決策です。

html

<span id='text'>JOHN SMITH</span>

js

var str = document.getElementById('text').innerHtml;
var return_text = str.toLowerCase();

css

#text{text-transform:capitalize;}
2
henrie

まず、 split itをスペースで使ってstringを配列に変換します。

var words = str.split(' ');

次に array.map を使用して、大文字の単語を含む新しい配列を作成します。

var capitalized = words.map(function(Word) {
    return Word.charAt(0).toUpperCase() + Word.substring(1, Word.length);
});

それから join スペースを含む新しい配列:

capitalized.join(" ");
function titleCase(str) {
  str = str.toLowerCase(); //ensure the HeLlo will become Hello at the end
  var words = str.split(" ");

  var capitalized = words.map(function(Word) {
    return Word.charAt(0).toUpperCase() + Word.substring(1, Word.length);
  });
  return capitalized.join(" ");
}

console.log(titleCase("I'm a little tea pot"));

注:

もちろんこれには欠点があります。これはすべてのWordの最初の文字だけを大文字にします。 Wordでは、これはスペースを区切ったすべての文字列を1 Wordとして扱うことを意味します。

おそらくあなたは:

str = "I'm a little/small tea pot";

これは作り出します

私は小さいです/ smallティーポット

予想と比較

私は小さいです/小さなティーポット

その場合、Regexと .replace を使うとうまくいきます。

ES6の場合:

const capitalize = str => str.length
  ? str[0].toUpperCase() +
    str.slice(1).toLowerCase()
  : '';

const escape = str => str.replace(/./g, c => `\\${c}`);
const titleCase = (sentence, seps = ' _-/') => {
  let wordPattern = new RegExp(`[^${escape(seps)}]+`, 'g');
  
  return sentence.replace(wordPattern, capitalize);
};
console.log( titleCase("I'm a little/small tea pot.") );

ES6 なし

function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.substring(1, str.length).toLowerCase();
}

function titleCase(str) {
  return str.replace(/[^\ \/\-\_]+/g, capitalize);
}

console.log(titleCase("hello/hi world"));
2
Geoman Yabes

これは、最初に FreeCodeCampのBonfireの "Title Case" の解決法に基づいています。これは、まず与えられた文字列をすべて小文字に変換してから、空白を含むすべての文字を大文字に変換する必要があります。

正規表現を使わずに:

function titleCase(str) {
 return str.toLowerCase().split(' ').map(function(val) { return val.replace(val[0], val[0].toUpperCase()); }).join(' ');
}
2

それは短くはありませんが、ここで私は学校で最近の課題について思い付いたものです:

var myPoem = 'What is a jQuery but a misunderstood object?'
//What is a jQuery but a misunderstood object? --> What Is A JQuery But A Misunderstood Object?

  //code here
var capitalize = function(str) {
  var strArr = str.split(' ');
  var newArr = [];
  for (var i = 0; i < strArr.length; i++) {
    newArr.Push(strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1))
  };
  return newArr.join(' ')  
}

var fixedPoem = capitalize(myPoem);
alert(fixedPoem);
1

John Resigのソリューションとしてフル機能を備えていますが、ワンライナーとして:( このgithubプロジェクトに基づく

function toTitleCase(e){var t=/^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i;return e.replace(/([^\W_]+[^\s-]*) */g,function(e,n,r,i){return r>0&&r+n.length!==i.length&&n.search(t)>-1&&i.charAt(r-2)!==":"&&i.charAt(r-1).search(/[^\s-]/)<0?e.toLowerCase():n.substr(1).search(/[A-Z]|\../)>-1?e:e.charAt(0).toUpperCase()+e.substr(1)})};

console.log( toTitleCase( "ignores mixed case words like iTunes, and allows AT&A and website.com/address etc..." ) );
1
Billy Moon

https://lodash.com/docs/4.17.11#capitalize

Lodash Libraryを使用してください。より信頼できる

_.capitalize('FRED'); => 'Fred'
1
Siddharth Joshi

this is a test ---> This Is A Test

function capitalize(str) {

  const Word = [];

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

  return Word.join(' ');

}

console.log(capitalize("this is a test"));
1
bajran

これが問題に対するコンパクトな解決策です:

function Title_Case(phrase) 
{
  var revised = phrase.charAt(0).toUpperCase();

  for ( var i = 1; i < phrase.length; i++ ) {

    if (phrase.charAt(i - 1) == " ") {
     revised += phrase.charAt(i).toUpperCase(); }
    else {
     revised += phrase.charAt(i).toLowerCase(); }

   }

return revised;
}
1
Covfefe

Title Case Functionを実行するための頑健な関数型プログラミング方法

Exaplinのバージョン

function toTitleCase(input){
    let output = input
        .split(' ')  // 'HOw aRe YOU' => ['HOw' 'aRe' 'YOU']
        .map((letter) => {
            let firstLetter = letter[0].toUpperCase() // H , a , Y  => H , A , Y
            let restLetters = letter.substring(1).toLowerCase() // Ow, Re, OU => ow, re, ou
            return firstLetter + restLetters // conbine together
        })
        .join(' ') //['How' 'Are' 'You'] => 'How Are You'
    return output
}

実装バージョン

function toTitleCase(input){
    return input
            .split(' ')
            .map(i => i[0].toUpperCase() + i.substring(1).toLowerCase())
            .join(' ') 
}

toTitleCase('HoW ARe yoU') // reuturn 'How Are You'
1
Wayne Chiu

グレッグディーンのソリューションのプロトタイプソリューション:

String.prototype.capitalize = function() {
  return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
1
dipole_moment

シンプルなキャッシュで、よりシンプルで高性能なバージョン。

  var TITLE_CASE_LOWER_MAP = {
    'a': 1, 'an': 1, 'and': 1, 'as': 1, 'at': 1, 'but': 1, 'by': 1, 'en':1, 'with': 1,
    'for': 1, 'if': 1, 'in': 1, 'of': 1, 'on': 1, 'the': 1, 'to': 1, 'via': 1
  };

  // LEAK/CACHE TODO: evaluate using LRU.
  var TITLE_CASE_CACHE = new Object();

  toTitleCase: function (title) {
    if (!title) return null;

    var result = TITLE_CASE_CACHE[title];
    if (result) {
      return result;
    }

    result = "";
    var split = title.toLowerCase().split(" ");
    for (var i=0; i < split.length; i++) {

      if (i > 0) {
        result += " ";
      }

      var Word = split[i];
      if (i == 0 || TITLE_CASE_LOWER_MAP[Word] != 1) {
        Word = Word.substr(0,1).toUpperCase() + Word.substr(1);
      }

      result += Word;
    }

    TITLE_CASE_CACHE[title] = result;

    return result;
  },
1
Rafael Sanches

いくつかのすばらしい答えがありました、しかし、多くの人々がWordを見つけるために正規表現を使用して、しかし、何らかの理由で、他の誰も最初の文字を置き換えるために正規表現を使用しません。説明のために、私は長い解決策と短い解決策を提供します。

長い解決策(より説明的)正規表現[^\s_\-/]*を使うことで、文中のすべての単語を見つけることができます。その後、Wordの最初の文字に一致させるために、正規表現.を使用できます。これら両方のためにreplaceの正規表現バージョンを使用して、我々はこのように解を変えることができます:

function toUpperCase(str) { return str.toUpperCase(); }
function capitalizeWord(Word) { return Word.replace(/./, toUpperCase); }
function capitalize(sentence) { return sentence.toLowerCase().replace(/[^\s_\-/]*/g, capitalizeWord); }

console.log(capitalize("hello world")); // Outputs: Hello World

同じことをする単一の関数に対して、replace呼び出しを次のようにネストします。

function capitalize(sentence) {
  return sentence.toLowerCase().replace(/[^\s_\-/]*/g, function (Word) {
    return Word.replace(/./, function (ch) { return ch.toUpperCase(); } );
  } );
}

console.log(capitalize("hello world")); // Outputs: Hello World
1
Stephen Quan

ジョン・スミス - >ジョン・スミス

'john smith'.replace(/(^\w|\s+\w){1}/g, function(str){ return str.toUpperCase() } );
0
iMartin

このソリューションでは、新しい文に対して句読点を考慮し、引用符を処理し、マイナーワードを小文字に変換し、頭字語または大文字の単語を無視します。

var stopWordsArray = new Array("a", "all", "am", "an", "and", "any", "are", "as", "at", "be", "but", "by", "can", "can't", "did", "didn't", "do", "does", "doesn't", "don't", "else", "for", "get", "gets", "go", "got", "had", "has", "he", "he's", "her", "here", "hers", "hi", "him", "his", "how", "i'd", "i'll", "i'm", "i've", "if", "in", "is", "isn't", "it", "it's", "its", "let", "let's", "may", "me", "my", "no", "of", "off", "on", "our", "ours", "she", "so", "than", "that", "that's", "thats", "the", "their", "theirs", "them", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "to", "too", "try", "until", "us", "want", "wants", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "well", "went", "were", "weren't", "what", "what's", "when", "where", "which", "who", "who's", "whose", "why", "will", "with", "won't", "would", "yes", "yet", "you", "you'd", "you'll", "you're", "you've", "your");

// Only significant words are transformed. Handles acronyms and punctuation
String.prototype.toTitleCase = function() {
    var newSentence = true;
    return this.split(/\s+/).map(function(Word) {
        if (Word == "") { return; }
        var canCapitalise = true;
        // Get the pos of the first alpha char (Word might start with " or ')
        var firstAlphaCharPos = Word.search(/\w/);
        // Check for uppercase char that is not the first char (might be acronym or all caps)
        if (Word.search(/[A-Z]/) > 0) {
            canCapitalise = false;
        } else if (stopWordsArray.indexOf(Word) != -1) {
            // Is a stop Word and not a new sentence
            Word.toLowerCase();
            if (!newSentence) {
                canCapitalise = false;
            }
        }
        // Is this the last Word in a sentence?
        newSentence = (Word.search(/[\.!\?:]['"]?$/) > 0)? true : false;
        return (canCapitalise)? Word.replace(Word[firstAlphaCharPos], Word[firstAlphaCharPos].toUpperCase()) : Word;
    }).join(' ');
}

// Pass a string using dot notation:
alert("A critical examination of Plato's view of the human nature".toTitleCase());
var str = "Ten years on: a study into the effectiveness of NCEA in New Zealand schools";
str.toTitleCase());
str = "\"Where to from here?\" the effectivness of eLearning in childhood education";
alert(str.toTitleCase());

/* Result:
A Critical Examination of Plato's View of the Human Nature.
Ten Years On: A Study Into the Effectiveness of NCEA in New Zealand Schools.
"Where to From Here?" The Effectivness of eLearning in Childhood Education. */
0
chasnz

メソッドの使用

function titleCase(str) {
  const arr = str.split(" ");
  const result = arr.reduce((acc, cur) => {
    const newStr = cur[0].toUpperCase() + cur.slice(1).toLowerCase();
    return acc += `${newStr} `
  },"")
  return result.slice(0, result.length-1);
}
0
Wayne Li
function toTitleCase(str) {
  var strnew = "";
  var i = 0;

  for (i = 0; i < str.length; i++) {
    if (i == 0) {
      strnew = strnew + str[i].toUpperCase();
    } else if (i != 0 && str[i - 1] == " ") {
      strnew = strnew + str[i].toUpperCase();
    } else {
      strnew = strnew + str[i];
    }
  }

  alert(strnew);
}

toTitleCase("hello world how are u");
0
vijayscode
ES-6 way to get title case of a Word or entire line.
ex. input = 'hEllo' --> result = 'Hello'
ex. input = 'heLLo woRLd' --> result = 'Hello World'

const getTitleCase = (str) => {
  if(str.toLowerCase().indexOf(' ') > 0) {
    return str.toLowerCase().split(' ').map((Word) => {
      return Word.replace(Word[0], Word[0].toUpperCase());
    }).join(' ');
  }
  else {
    return str.slice(0, 1).toUpperCase() + str.slice(1).toLowerCase();
  }
}
0
Mayur Nandane

私のワンラインソリューション:

String.prototype.capitalizeWords = function() {
    return this.split(" ").map(function(ele){ return ele[0].toUpperCase() + ele.slice(1).toLowerCase();}).join(" ");
};

次に、任意の文字列に対してメソッドcapitalizeWords()を呼び出すことができます。例えば:

var myS = "this actually works!";
myS.capitalizeWords();

>>> This Actually Works

私の他のソリューション:

function capitalizeFirstLetter(Word) {
    return Word[0].toUpperCase() + Word.slice(1).toLowerCase();
}
String.prototype.capitalizeAllWords = function() {
    var arr = this.split(" ");
    for(var i = 0; i < arr.length; i++) {
        arr[i] = capitalizeFirstLetter(arr[i]);
    }
    return arr.join(" ");
};

次に、任意の文字列に対してメソッドcapitalizeWords()を呼び出すことができます。例えば:

var myStr = "this one works too!";
myStr.capitalizeWords();

>>> This One Works Too

グレッグディーンの回答に基づく代替ソリューション:

function capitalizeFirstLetter(Word) {
    return Word[0].toUpperCase() + Word.slice(1).toLowerCase();
}
String.prototype.capitalizeWords = function() {
    return this.replace(/\w\S*/g, capitalizeFirstLetter);
};

次に、任意の文字列に対してメソッドcapitalizeWords()を呼び出すことができます。例えば:

var myString = "yes and no";
myString.capitalizeWords()

>>> Yes And No
0
FouadDev
function titleCase(str) {
    str = str.toLowerCase();

    var strArray = str.split(" ");


    for(var i = 0; i < strArray.length; i++){
        strArray[i] = strArray[i].charAt(0).toUpperCase() + strArray[i].substr(1);

    }

    var result = strArray.join(" ");

    //Return the string
    return result;
}
0
Pro N00P
String.prototype.capitalize = function() {
    return this.toLowerCase().split(' ').map(capFirst).join(' ');
    function capFirst(str) {
        return str.length === 0 ? str : str[0].toUpperCase() + str.substr(1);
    }
}

使用法:

"hello world".capitalize()
0
zurfyx

同様のことを達成するための別のアプローチは以下の通りです。

formatName(name) {
    let nam = '';
    name.split(' ').map((Word, index) => {
        if (index === 0) {
            nam += Word.split('').map((l, i) => i === 0 ? l.toUpperCase() : l.toLowerCase()).join('');
        } else {
            nam += ' ' + Word.split('').map(l => l.toLowerCase()).join('');
        }
    });
    return nam;
}
0
Muhammad Usman

これは1行のソリューションです。文字列内のすべての作業を変換する場合は、文字列を ""で分割し、各部分に繰り返しこの解決方法を適用し、変換された各部分を配列に追加して ""で結合します。

var stringToConvert = 'john';
stringToConvert = stringToConvert.charAt(0).toUpperCase() + Array.prototype.slice.call(stringToConvert, 1).join('');
console.log(stringToConvert);
0
CodeMaxter