5172 Stimmen

Wie wird der erste Buchstabe einer Zeichenkette in JavaScript großgeschrieben?

Wie kann ich den ersten Buchstaben einer Zeichenkette in Großbuchstaben umwandeln, ohne die Großschreibung der anderen Buchstaben zu ändern?

Zum Beispiel:

  • "this is a test" "This is a test"
  • "the Eiffel Tower" "The Eiffel Tower"
  • "/index.html" "/index.html"

39voto

monokrome Punkte 1333

Wenn Sie Text in Großbuchstaben umformatieren möchten, sollten Sie die anderen Beispiele entsprechend ändern:

function capitalize (text) {
    return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}

Dadurch wird sichergestellt, dass der folgende Text geändert wird:

TEST => Test
This Is A TeST => This is a test

38voto

zianwar Punkte 3323
var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);

34voto

Fredrik A. Punkte 912
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'

34voto

Murat Kucukosman Punkte 627
String.prototype.capitalize = function(){
    return this.replace(/(^|\s)([a-z])/g, 
                        function(m, p1, p2) {
                            return p1 + p2.toUpperCase();
                        });
};

Verwendung:

capitalizedString = someString.capitalize();

Dies ist eine Zeichenfolge => Dies ist eine Zeichenfolge

34voto

Jack G Punkte 3797

57 81 verschiedene Antworten auf diese Frage, einige davon themenfremd, und doch keine Sie werfen das wichtige Problem auf, dass keine der aufgeführten Lösungen mit asiatischen Schriftzeichen, Emojis und anderen Zeichen mit hohem Unicode-Punktwert in vielen Browsern funktionieren wird. Hier ist eine Lösung, die es tut:

const consistantCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ?
    function(S) {
        "use-strict"; // Hooray! The browser uses UTF-32!
        return S.charAt(0).toUpperCase() + S.substring(1);
    } : function(S) {
        "use-strict";
        // The browser is using UCS16 to store UTF-16
        var code = S.charCodeAt(0)|0;
        return (
          code >= 0xD800 && code <= 0xDBFF ? // Detect surrogate pair
            S.slice(0,2).toUpperCase() + S.substring(2) :
            S.charAt(0).toUpperCase() + S.substring(1)
        );
    };
const prettyCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ?
    function(S) {
        "use-strict"; // Hooray! The browser uses UTF-32!
        return S.charAt(0).toLocaleUpperCase() + S.substring(1);
    } : function(S) {
        "use-strict";
        // The browser is using UCS16 to store UTF-16
        var code = S.charCodeAt(0)|0;
        return (
          code >= 0xD800 && code <= 0xDBFF ? // Detect surrogate pair
            S.slice(0,2).toLocaleUpperCase() + S.substring(2) :
            S.charAt(0).toLocaleUpperCase() + S.substring(1)
        );
    };

Bitte beachten Sie, dass die obige Lösung versucht, UTF-32 zu berücksichtigen. In der Spezifikation heißt es jedoch offiziell, dass die Browser alles in UTF-16 abbilden müssen, das auf UCS2 abgebildet wird. Wenn wir jedoch alle zusammenkommen, unseren Teil dazu beitragen und uns auf UTF32 vorbereiten, dann besteht die Chance, dass die TC39 den Browsern die Verwendung von UTF-32 erlaubt (so wie Python 24 Bits für jedes Zeichen der Zeichenkette verwendet). Das muss einem Englisch sprechenden Menschen dumm vorkommen: Niemand, der nur Latein-1 verwendet, hat sich jemals mit Mojibake weil Latin-I von allen Zeichenkodierungen unterstützt wird. Benutzer in anderen Ländern (wie China, Japan, Indonesien usw.) haben jedoch nicht so viel Glück. Sie haben ständig mit Kodierungsproblemen zu kämpfen, die nicht nur von der Webseite, sondern auch von JavaScript verursacht werden: Viele chinesische/japanische Zeichen werden von JavaScript als zwei Buchstaben behandelt und können daher in der Mitte auseinandergebrochen werden, was zu und führt (zwei Fragezeichen, die für den Endbenutzer keinen Sinn ergeben). Wenn wir anfangen könnten, uns auf UTF-32 vorzubereiten, dann könnte TC39 den Browsern erlauben, das zu tun, was Python vor vielen Jahren getan hat, was Python für die Arbeit mit vielen Unicode-Zeichen sehr populär gemacht hat: UTF-32 verwenden.

consistantCapitalizeFirstLetter funktioniert korrekt in Internet Explorer 3+ (wenn die const wird geändert in var ). prettyCapitalizeFirstLetter erfordert Internet Explorer 5.5+ (siehe oben auf Seite 250 von dieses Dokument ). Diese Tatsache ist jedoch eher ein Witz, denn es ist sehr wahrscheinlich, dass der Rest des Codes auf Ihrer Webseite nicht einmal in Internet Explorer 8 - wegen all der DOM- und JScript-Fehler und des Mangels an Funktionen in diesen älteren Browsern. Außerdem verwendet niemand mehr Internet Explorer 3 oder Internet Explorer 5.5.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X