Bagaimana cara membuat huruf pertama dari string huruf besar, tetapi tidak mengubah apapun dari surat-surat lainnya?
Misalnya:
->. "Ini adalah tes"
"Menara Eiffel"
> "Menara Eiffel"
"/index.html"
> "/index.html"
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
Beberapa jawaban lain memodifikasi String.prototipe
(jawaban ini digunakan untuk juga), tapi saya akan menyarankan terhadap hal ini sekarang karena rawatan (keras untuk mencari tahu di mana fungsi ini ditambahkan ke prototipe
dan bisa menyebabkan konflik jika kode lain menggunakan nama yang sama / browser menambahkan asli fungsi dengan nama yang sama di masa depan).
Berikut ini's sebuah pendekatan yang lebih berorientasi obyek:
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
Anda'd panggil fungsi, seperti ini:
"hello world".capitalize();
Dengan output yang diharapkan menjadi:
"Hello world"
Berikut adalah versi singkat dari jawaban populer yang mendapat huruf pertama dengan memperlakukan string sebagai array:
function capitalize(s)
{
return s[0].toUpperCase() + s.slice(1);
}
Update:
Menurut komentar di bawah ini doesn't bekerja di IE 7 atau di bawah ini.
Update 2:
Untuk menghindari undefined
untuk string kosong (lihat @njzk2's komentar di bawah ini), anda dapat memeriksa untuk string kosong:
function capitalize(s)
{
return s && s[0].toUpperCase() + s.slice(1);
}
Berikut ini adalah metode tercepat berdasarkan ini jsperf tes (diurutkan dari yang paling cepat ke yang paling lambat).
Seperti yang anda lihat, dua metode pertama adalah pada dasarnya sebanding dalam hal kinerja, sedangkan mengubah String.prototipe
adalah jauh yang paling lambat dalam hal kinerja.
// 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);
}
Untuk kasus lain yang saya butuhkan untuk membesarkan huruf pertama dan huruf kecil yang lain. Berikut kasus-kasus yang membuat saya mengubah fungsi ini:
//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();
Ini adalah tahun 2018 ECMAScript 6+ Solusi:
const str = 'the Eiffel Tower';
const newStr = `${str[0].toUpperCase()}${str.slice(1)}`;
console.log('Original String:', str); // the Eiffel Tower
console.log('New String:', newStr); // The Eiffel Tower
Membesarkan huruf pertama dari semua kata-kata dalam string:
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);
}
return pieces.join(" ");
}
Jika anda're sudah (atau mengingat) menggunakan lodash
, solusinya mudah:
_.upperFirst('fred');
// => 'Fred'
_.upperFirst('FRED');
// => 'FRED'
_.capitalize('fred') //=> 'Fred'
Melihat mereka docs: https://lodash.com/docs#capitalize
_.camelCase('Foo Bar'); //=> 'fooBar'
https://lodash.com/docs/4.15.0#camelCase
_.lowerFirst('Fred');
// => 'fred'
_.lowerFirst('FRED');
// => 'fRED'
_.snakeCase('Foo Bar');
// => 'foo_bar'
Vanilla js untuk pertama atas kasus:
function upperCaseFirst(str){
return str.charAt(0).toUpperCase() + str.substring(1);
}
Kita bisa mendapatkan karakter pertama dengan salah satu favorit saya RegExp
, tampak seperti tersenyum manis: /^./
String.prototype.capitalize = function () {
return this.replace(/^./, function (match) {
return match.toUpperCase();
});
};
Dan untuk semua kopi-pecandu:
String::capitalize = ->
@replace /^./, (match) ->
match.toUpperCase()
...dan untuk semua orang yang berpikir bahwa ada's cara yang lebih baik untuk melakukan hal ini, tanpa memperpanjang asli prototipe:
var capitalize = function (input) {
return input.replace(/^./, function (match) {
return match.toUpperCase();
});
};
String.prototype.capitalize = function(allWords) {
return (allWords) ? // if all words
this.split(' ').map(word => word.capitalize()).join(' ') : //break down phrase to words then recursive calls until capitalizing all words
this.charAt(0).toUpperCase() + this.slice(1); // if allWords is undefined , capitalize only the first word , mean the first char of the whole string
}
Dan kemudian:
"capitalize just the first word".capitalize(); ==> "Capitalize just the first word"
"capitalize all words".capitalize(true); ==> "Capitalize All Words"
const capitalize = (string = '') => [...string].map( //convert to array with each item is a char of string by using spread operator (...)
(char, index) => index ? char : char.toUpperCase() // index true means not equal 0 , so (!index) is the first char which is capitalized by `toUpperCase()` method
).join('') //return back to string
kemudian memanfaatkan("hello") // Hello
Jika anda menggunakan underscore.js atau Lo-Dash, underscore.string perpustakaan menyediakan string ekstensi, termasuk memanfaatkan:
_.memanfaatkan(string) Mengubah huruf pertama dari string ke huruf besar.
Contoh:
_.capitalize("foo bar") == "Foo bar"
p::first-letter {
text-transform: uppercase;
}
::first-letter
, itu berlaku untuk yang pertama karakter, yaitu dalam kasus string %a
, pemilih ini akan berlaku untuk %
dan seperti a
tidak akan dikapitalisasi.:first-letter
).Karena ada banyak jawaban, tetapi tidak ada di ES2015 yang akan memecahkan masalah asli efisien, saya datang dengan berikut:
const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
parameter => fungsi
ini disebut panah fungsi.capitalizeFirstChar
bukan capitalizeFirstLetter
, karena OP tidak't meminta kode yang mengkapitalisasi huruf pertama di seluruh string, tapi pertama char (jika itu's surat, tentu saja).const
memberikan kita kemampuan untuk menyatakan capitalizeFirstChar
sebagai konstan, yang diinginkan karena sebagai seorang programmer, anda harus selalu secara eksplisit menyatakan niat anda.string.charAt(0)
dan string[0]
. Namun perlu dicatat, bahwa string[0]
akan undefined
untuk string kosong, jadi harus ditulis ulang untuk string && string[0]
, yang terlalu verbose, dibandingkan dengan alternatif.string.substring(1)
lebih cepat dari string.slice(1)
.It's selalu lebih baik untuk menangani jenis-jenis barang dengan menggunakan CSS pertama, secara umum, jika anda dapat memecahkan sesuatu menggunakan CSS, pergi untuk yang pertama, kemudian mencoba JavaScript untuk memecahkan masalah anda, sehingga dalam hal ini mencoba menggunakan :first-letter
di CSS dan menerapkan text-transform:capitalize;
Jadi cobalah membuat sebuah kelas untuk itu, sehingga anda dapat menggunakannya secara global, misalnya: .pertama-huruf-huruf besar
dan menambahkan sesuatu seperti di bawah ini pada CSS anda:
.first-letter-uppercase:first-letter {
text-transform:capitalize;
}
Juga alternatif pilihan JavaScript, jadi yang terbaik akan menjadi sesuatu seperti ini:
function capitalizeTxt(txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1); //or if you want lowercase the rest txt.slice(1).toLowerCase();
}
dan panggilan itu seperti:
capitalizeTxt('this is a test'); // return 'This is a test'
capitalizeTxt('the Eiffel Tower'); // return 'The Eiffel Tower'
capitalizeTxt('/index.html'); // return '/index.html'
capitalizeTxt('alireza'); // return 'Alireza'
Jika anda ingin menggunakan kembali berulang, it's baik pasangkan ke javascript asli String, jadi sesuatu seperti di bawah ini:
String.prototype.capitalizeTxt = String.prototype.capitalizeTxt || function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
dan panggilan itu sebagai berikut:
'this is a test'.capitalizeTxt(); // return 'This is a test'
'the Eiffel Tower'.capitalizeTxt(); // return 'The Eiffel Tower'
'/index.html'.capitalizeTxt(); // return '/index.html'
'alireza'.capitalizeTxt(); // return 'Alireza'
Jika anda ingin memformat semua-topi teks, anda mungkin ingin memodifikasi contoh-contoh lain seperti:
function capitalize (text) {
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
Ini akan memastikan bahwa teks berikut adalah berubah:
TEST => Test
This Is A TeST => This is a test
Ada cara yang sangat sederhana untuk menerapkannya dengan ganti. Untuk ECMAScript 6:
'foo'.replace(/^./, str => str.toUpperCase())
Hasilnya:
'Foo'