AngularJsの文字列の最初の文字を大文字にします


134

angularjsの文字列の最初の文字を大文字にしたい

私が使用した{{ uppercase_expression | uppercase}}ので、文字列全体を大文字に変換します。


1
はい、いくつかのコードを記述する必要があります。Angularはあなたのためにすべてをするわけではありません。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
JB Nizet

11
これはCSSを使用して行うこともできます
。text

1
:あなたは本当に、角度を使用したい場合は、このソリューションを使用することができますcodepen.io/WinterJoey/pen/sfFaK
Yousef_Shamshoum

1
単語の最初の文字を大文字にする単純なディレクティブ/フィルターを作成します...
Pankaj Parkar

回答:


234

この大文字のフィルターを使用する

var app = angular.module('app', []);

app.controller('Ctrl', function ($scope) {
   $scope.msg = 'hello, world.';
});

app.filter('capitalize', function() {
    return function(input) {
      return (angular.isString(input) && input.length > 0) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() : input;
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="Ctrl">
        <p><b>My Text:</b> {{msg | capitalize}}</p>
    </div>
</div>


11
誤って数字を大文字にすると、エラーになります。関数の本体は次のようになりますreturn (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;。文字列でない場合は、変更せずに返します。
Jabba

2
ここにカスタムの大文字化フィルターcodepen.io/WinterJoey/pen/sfFaK
ミハル

148

代わりにCSSを使用できるので、angular / jsを使用しないでください:

CSSにクラスを追加します。

.capitalize {
   text-transform: capitalize;
}

次に、単純に式(exの場合)をhtmlでラップします。

<span class="capitalize">{{ uppercase_expression }}</span>

jsは必要ありません;)


7
この変換では、各単語の最初の文字が大文字になるため、1単語の文字列にのみ適用されます
jakub.g

22
@ jakub.g最初の単語(文字)を大文字にしたいだけの場合は、cssセレクターを:first-letter疑似要素セレクターで展開します。他にカバーされていないものはありますか?:)
Philzen

2
@Philzenはい!HTMLだけでどのように実行しますか?;-)
ロメインビンセント

@RomainVincent「HTMLのみ」とはどういう意味ですか?たぶん、以下の私の答えが役立つでしょう(「コードスニペットを実行」をクリックして、実際の動作を確認してください)。HTMLコンテンツは静的です。少なくとも、CSSまたはJSを投入して、それぞれのDOMコンテンツのスタイルを変更する必要があります。
Philzen

4
すみません、それは冗談を言うのは悪い試みでした。
Romain Vincent

57

Bootstrapを使用する場合は、text-capitalizeヘルパークラスを追加するだけです。

<p class="text-capitalize">CapiTaliZed text.</p>

編集:リンクが再び死んだ場合に備えて:

テキスト変換

テキスト大文字化クラスを使用して、コンポーネント内のテキストを変換します。

小文字のテキスト。
大文字のテキスト。
CapiTaliZed Text。

<p class="text-lowercase">Lowercased text.</p>
<p class="text-uppercase">Uppercased text.</p>
<p class="text-capitalize">CapiTaliZed text.</p>

text-capitalizeが各単語の最初の文字のみを変更し、他の文字の大文字小文字は影響を受けないことに注意してください。


目標を達成するための迅速で簡単な方法です。これにより、文字列内のすべての単語の最初の文字が大文字になります。これはすばらしいことです。
kisanme

これは舞台裏で使用していますtext-transform: capitalize;
cameck

27

Angular 4+を使用している場合は、 titlecase

{{toUppercase | titlecase}}

パイプを書く必要はありません。


4
これは不正解です。質問では、すべての単語の最初の文字ではなく、文字列の最初の文字を大文字にするように求められます。
Alex Peters


18

パフォーマンスが優れている場合は、AngularJSフィルターを使用しないようにしてください。これらのフィルターは、式ごとに2回適用され、安定性を確認します。

より良い方法は、CSS ::first-letter疑似要素をで使用することtext-transform: uppercase;です。spanただし、などのインライン要素では使用できません。そのため、次善の策はtext-transform: capitalize;、すべての単語を大文字にするブロック全体で使用することです。

例:

var app = angular.module('app', []);

app.controller('Ctrl', function ($scope) {
   $scope.msg = 'hello, world.';
});
.capitalize {
  display: inline-block;  
}

.capitalize::first-letter {
  text-transform: uppercase;
}

.capitalize2 {
  text-transform: capitalize;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="Ctrl">
        <b>My text:</b> <div class="capitalize">{{msg}}</div>
        <p><b>My text:</b> <span class="capitalize2">{{msg}}</span></p>
    </div>
</div>


1
残念ながら::first-letterdisplay: inlineまたはdisplay: flexで機能せず、display:blockまたはinline-block要素でのみ機能します
jakub.g

18

@TrampGuyからの答えが好きです

CSSは(常にではなく)常に優れた選択肢であるためtext-transform: capitalize;、次のようにしてください。

しかし、コンテンツがそもそもすべて大文字の場合はどうでしょうか。text-transform: capitalize;「FOO BAR」などのコンテンツを試しても、ディスプレイには「FOO BAR」が表示されます。その問題を回避するにtext-transform: capitalize;は、CSSにを入れるだけでなく、文字列を小文字にすることもできます。

<ul>
  <li class="capitalize">{{ foo.awesome_property | lowercase }}</li>
</ul>

@TrampGuyのCapitalizeクラスを使用しています。

.capitalize {
  text-transform: capitalize;
}

そのため、foo.awsome_property通常「FOO BAR」を印刷するふりをすると、目的の「Foo Bar」が印刷されます。


14

文字列から各単語を大文字にする場合(進行中->進行中)、このような配列を使用できます。

.filter('capitalize', function() {
    return function(input) {
        return (!!input) ? input.split(' ').map(function(wrd){return wrd.charAt(0).toUpperCase() + wrd.substr(1).toLowerCase();}).join(' ') : '';
    }
});

11

これは別の方法です:

{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}

9

Angular 2以降では、を使用できます{{ abc | titlecase }}

完全なリストについては、Angular.io APIを確認してください。


1
これは不正解です。質問では、すべての単語の最初の文字ではなく、文字列の最初の文字を大文字にするように求められます。
Alex Peters

7

.capitalize {
  display: inline-block;
}

.capitalize:first-letter {
  font-size: 2em;
  text-transform: capitalize;
}
<span class="capitalize">
  really, once upon a time there was a badly formatted output coming from my backend, <strong>all completely in lowercase</strong> and thus not quite as fancy-looking as could be - but then cascading style sheets (which we all know are <a href="http://9gag.com/gag/6709/css-is-awesome">awesome</a>) with modern pseudo selectors came around to the rescue...
</span>


3

meanjs.orgのAngularJSの場合、カスタムフィルターを modules/core/client/app/init.js

文の各単語を大文字にするためのカスタムフィルターが必要でした。これを行う方法を次に示します。

angular.module(ApplicationConfiguration.applicationModuleName).filter('capitalize', function() {
return function(str) {
    return str.split(" ").map(function(input){return (!!input) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() :         ''}).join(" ");

}
});

map関数のクレジットは@Naveen rajに送られます



2

カスタムフィルターを作成したくない場合は、直接使用できます

{{ foo.awesome_property.substring(0,1) | uppercase}}{{foo.awesome_property.substring(1)}}

2
var app = angular.module("app", []);
app.filter('capitalize', function() {
    return function(str) {
        if (str === undefined) return; // avoid undefined
        str = str.toLowerCase().split(" ");
        var c = '';
        for (var i = 0; i <= (str.length - 1); i++) {
            var word = ' ';
            for (var j = 0; j < str[i].length; j++) {
                c = str[i][j];
                if (j === 0) {
                    c = c.toUpperCase();
                }
                word += c;
            }
            str[i] = word;
        }
        str = str.join('');
        return str;
    }
});

2
このコードスニペットが解決策となる可能性がありますが、説明を含めると、投稿の品質向上に役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
peacetype

1

この問題に独自の見解を追加するために、私はカスタムディレクティブを自分で使用します。

app.directive('capitalization', function () {
return {
    require: 'ngModel',
    link: function (scope, element, attrs, modelCtrl) {

        modelCtrl.$parsers.push(function (inputValue) {

            var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase() + inputValue.substr(1).toLowerCase() : '';

            if (transformedInput != inputValue) {
                modelCtrl.$setViewValue(transformedInput);
                modelCtrl.$render();
            }

            return transformedInput;
        });
    }
};

宣言したら、次のようにHTML内に配置できます。

<input ng-model="surname" ng-trim="false" capitalization>

1

代わりに、文の各単語を大文字にしたい場合は、このコードを使用できます

app.filter('capitalize', function() {


return function(input, scope) {
if (input!=null)
input = input.toLowerCase().split(' ');

for (var i = 0; i < input.length; i++) {
   // You do not need to check if i is larger than input length, as your for does that for you
   // Assign it back to the array
   input[i] = input[i].charAt(0).toUpperCase() + input[i].substring(1);     


}
   // Directly return the joined string
   return input.join(' '); 
  }
});

そして、フィルター「capitalize」を文字列入力に追加するだけです。例-{{name | 大文字}}


0

Angular 4またはCLIでは、次のようなPIPEを作成できます:

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'capitalize'
})
/**
 * Place the first letter of each word in capital letters and the other in lower case. Ex: The LORO speaks = The Loro Speaks
 */
export class CapitalizePipe implements PipeTransform {
  transform(value: any): any {
    value = value.replace('  ', ' ');
    if (value) {
      let w = '';
      if (value.split(' ').length > 0) {
        value.split(' ').forEach(word => {
          w += word.charAt(0).toUpperCase() + word.toString().substr(1, word.length).toLowerCase() + ' '
        });
      } else {
        w = value.charAt(0).toUpperCase() + value.toString().substr(1, value.length).toLowerCase();
      }
      return w;
    }
    return value;
  }
}

0

Angularには文字列の最初の文字を大文字にする「タイトルケース」があります

例:

envName | titlecase

EnvNameとして表示されます

補間で使用する場合、次のようなすべてのスペースを避けます

{{envName|titlecase}}

envNameの値の最初の文字は大文字で出力されます。


1
これは上記の答えに価値を提供しません
Ivan Kaloyanov

1
これは不正解です。質問では、すべての単語の最初の文字ではなく、文字列の最初の文字を大文字にするように求められます。
Alex Peters

0
if (value){
  value = (value.length > 1) ? value[0].toUpperCase() + value.substr(1).toLowerCase() : value.toUpperCase();
}

-1

大文字の機能のランタイムを次のように追加できます。

<td>{{lastName.charAt(0).toUpperCase()+ lastName.substr(1).toLowerCase()}}</td>


-2

ニディッシュの答えに加えて、

AngularJを使用していて、文字列内の各単語の最初の文字を大文字にする場合は、次のコードを使用します。

var app = angular.module('app', []);

app.controller('Ctrl', function ($scope) {
   $scope.msg = 'hello, world.';
});

app.filter('titlecase', function() {
    return function(input) {
      //Check for valid string
      if(angular.isString(input) && input.length > 0) {
        var inputArray = input.split(' ');
        for(var i=0; i<inputArray.length; i++) {
          var value = inputArray[i];
          inputArray[i] =  value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
        }
        return inputArray.join(' ');
      } else {
        return input;
      }
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
    <div ng-controller="Ctrl">
        <p><b>My Text:</b> {{msg | titlecase}}</p>
    </div>
</div>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.