Domanda Come faccio a rendere la prima lettera di una stringa in maiuscolo in JavaScript?


Come faccio a fare la prima lettera di una stringa maiuscola, ma non cambiare il caso di nessuna delle altre lettere?

Per esempio:

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

2960
2018-06-22 08:25


origine


risposte:


function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

Alcune altre risposte modificano String.prototype (anche questa risposta era abituale), ma vorrei sconsigliarlo ora a causa della manutenibilità (difficile scoprire dove la funzione viene aggiunta al prototype e potrebbe causare conflitti se un altro codice usa lo stesso nome / un browser aggiunge una funzione nativa con lo stesso nome in futuro).


4717
2018-06-22 08:30



Un approccio più orientato agli oggetti:

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

E poi:

"hello world".capitalize();  =>  "Hello world" 

1193
2017-07-20 15:51



In CSS:

p:first-letter {
    text-transform:capitalize;
}

407
2017-07-17 14:06



Ecco una versione abbreviata della risposta popolare che ottiene la prima lettera trattando la stringa come una matrice:

function capitalize(s)
{
    return s[0].toUpperCase() + s.slice(1);
}

Aggiornare:

Secondo i commenti qui sotto questo non funziona in IE 7 o sotto.

Aggiornamento 2:

Evitare undefined per stringhe vuote (vedi Il commento di @ njzk2 qui sotto), puoi verificare una stringa vuota:

function capitalize(s)
{
    return s && s[0].toUpperCase() + s.slice(1);
}

235
2017-08-28 23:03



Se sei interessato alle prestazioni di alcuni metodi diversi pubblicati:

Ecco i metodi più veloci basati su questo test jsperf (ordinato dal più veloce al più lento).

Come potete vedere, i primi due metodi sono essenzialmente comparabili in termini di prestazioni, mentre alterando il String.prototype è di gran lunga il più lento in termini di prestazioni.

// 10,889,187 operations/sec
function capitalizeFirstLetter(string) {
    return string[0].toUpperCase() + string.slice(1);
}

// 10,875,535 operations/sec
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// 4,632,536 operations/sec
function capitalizeFirstLetter(string) {
    return string.replace(/^./, string[0].toUpperCase());
}

// 1,977,828 operations/sec
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

enter image description here


134
2017-11-14 03:26



Per un altro caso ho bisogno di capitalizzare la prima lettera e in minuscolo il resto. I seguenti casi mi hanno fatto cambiare questa funzione:

//es5
function capitalize(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
capitalize("alfredo")  // => "Alfredo"
capitalize("Alejandro")// => "Alejandro
capitalize("ALBERTO")  // => "Alberto"
capitalize("ArMaNdO")  // => "Armando"

// es6 using destructuring 
const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();

128
2017-07-19 18:17



Ecco le migliori soluzioni:

Prima soluzione In CSS:

p {
  text-transform: capitalize;
}

Seconda soluzione :

function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}

Potresti anche aggiungerlo al String.prototype in modo da poterlo concatenare con altri metodi:

String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
}

e usalo in questo modo:

'string'.capitalizeFirstLetter() // String

Terza soluzione:

function ucFirstAllWords( str )
{
    var pieces = str.split(" ");
    for ( var i = 0; i < pieces.length; i++ )
    {
        var j = pieces[i].charAt(0).toUpperCase();
        pieces[i] = j + pieces[i].substr(1).toLowerCase();
    }
    return pieces.join(" ");
}

106
2018-02-16 05:30



var string = "hello world";
string = string.charAt(0).toUpperCase() + string.slice(1);
alert(string);

62
2017-07-17 06:23