83 Soru: Bir dize ilk harfini JavaScript'te nasıl yapabilirim?

tarafından oluşturulan soru Fri, Apr 5, 2019 12:00 AM

Bir dizgenin ilk harfini büyük harfle nasıl yaparım, ancak diğer harflerin hiçbirini değiştirmez miyim?

Örneğin:

  •  "this is a test" - > "This is a test"
  •  "the Eiffel Tower" - > "The Eiffel Tower"
  •  "/index.html" - > "/index.html"
3412
  1. Alt çizgi underscore.string , bunu ve diğer birçok harika aracı içerir.
    2013-04-15 19: 16: 14Z
  2. ne olacak: return str.replace(/(\b\w)/gi,function(m){return m.toUpperCase();});
    2014-11-21 19: 25: 37Z
  3. Basit: string[0].toUpperCase() + string.substring(1)
    2015-11-25 04: 00: 25Z
30 Yanıtlar                              30                         
 
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

Bazı diğer cevaplar String.prototype’u (bu yanıt da kullanılmış) değiştirir, ancak şimdi bakımdan dolayı (işlevin prototype’a nerede eklendiğini bulmak zor ve başka bir kod kullanılırsa çatışmalara neden olabilir) aynı ad /bir tarayıcı gelecekte aynı ada sahip bir yerel işlev ekler).

    
5314
2018-02-14 12: 22: 09Z
  1. alt dize substr'dan daha fazla tarayıcıda anlaşıldı
    2011-07-06 13: 07: 05Z
  2. Nevermind ... ""[0].toUpperCase() başarısız oldu
    2013-01-04 19: 42: 38Z
  3. Dilimi (1) LowCase için de yapmamalı mıyız?
    2014-01-30 17: 58: 43Z
  4. Hayır, çünkü OP bu örneği verdi: the Eiffel Tower -> The Eiffel Tower. Ayrıca, işlev capitaliseFirstLetter değil capitaliseFirstLetterAndLowerCaseAllTheOthers olarak adlandırılır.
    2014-08-02 10: 24: 13Z
  5. Hiç kimse OOP'un önemli kurallarını umursamıyor mu? - Sahip olmadığınız nesneleri hiç düzenlemeyin mi? . BTW, bu tek astar çok daha şık görünüyor: string[0].toUpperCase() + string.substring(1)
    2015-12-09 09: 00: 17Z

İşte daha nesneye yönelik bir yaklaşım:

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

Bu işlevi şöyle çağırırsınız:

 
"hello world".capitalize();

Beklenen çıktı şöyle:

 
"Hello world" 
    
1283
2019-05-12 19: 14: 30Z
  1. Bu çözümü seviyorum çünkü Ruby gibi ve Ruby de tatlı! :) Dizginin diğer tüm harflerini küçük harf harflerle kükürterek, tam olarak Ruby: return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
    gibi çalışmasını sağlar
    2011-03-08 18: 21: 04Z
  2. Prototip sonrası bu dünyada, yerel nesnelerin değiştirilmesi veya genişletilmesi önerilmemektedir.
    2011-07-25 22: 24: 09Z
  3. @ rxgx - "Uzatma" boogeyman şimdi ölmeye başlıyor (tanrıya şükür) ve insanlar kafalarını jSand'dan çıkarmaya ve bunu gerçekleştirmeye başladı sadece bir dil özelliğidir. Prototype.js, Object'i kısa bir süre için genişlettiğinden, Yerlileri genişletmenin kötü olduğu anlamına gelmez. Bilinmeyen bir tüketici için kod yazıyorsanız bunu yapmamalısınız (bir analytics betiği gibi)şapka rastgele sitelere gider), ama bunun dışında iyi.
    2012-05-19 20: 47: 18Z
  4. @ csuwldcat Kullandığınız başka bir kitaplık, siz bilmeden kendi büyük harfini eklerse ne olur? Prototiplerin genişletilmesi prototipin yapıp yapmadığından bağımsız olarak kötüdür. ES6 ile, içseller pastanıza sahip olmanızı ve onu da yemenizi sağlar. ECMASCRIPT şartnamesine uyan şim yaratan insanlar için ölen "öcü adam" ile karıştırılmaya başladığını düşünüyorum. Bu şimler mükemmel derecede iyidir çünkü bir şim ekleyen başka bir kütüphane de aynı şekilde uygular. Bununla birlikte, kendi spesifik olmayan kendi özel bilgilerinizi eklemekten kaçınılmalıdır.
    2014-09-17 20: 37: 27Z
  5. Yerlileri genişletmek son derece kötü bir uygulamadır. "Ah, bu kodu asla başka bir şeyle kullanmayacağım" bileseniz, muhtemelen siz (veya başka biri) kullanacaksınız. Sonra üç gününü garip bir matematik hatası bulmaya çalışarak geçirecekler çünkü birileri Number.money () 'yi diğer kütüphanenizden biraz daha farklı bir para birimiyle başa çıkmak için genişletti. Cidden, bunun büyük bir şirkette olduğunu gördüm ve yerlilerin prototipleri ile karıştırılmış bir kütüphane bulmak için kimsenin ayıklanmasına değmez.
    2014-12-30 01: 03: 04Z

CSS’de:

 
p:first-letter {
    text-transform:capitalize;
}
    
488
2016-08-12 22: 36: 50Z
  1. OP bir JS çözümü istiyor.
    2013-09-23 15: 23: 11Z
  2. $('# mystring_id'). text (string) .css ('text-transform', 'capitalize');
    2015-09-24 17: 34: 23Z
  3. Ayrıca, bu yalnızca dizenin görüntüsünü etkiler - gerçek değeri değil. Bir formda ise, örneğin, değer hala olduğu gibi gönderilir.
    2016-06-07 13: 26: 31Z
  4. Bu bu sorunun cevabı değil !!! Bu bir JS sorusu için bir CSS çözümüdür. Downvote. SO, doğru cevaplarla ilgilidir, çünkü "bir çözüm", onu "doğru çözüm" yapmaz ve bu da işaretten uzaktır.
    2017-02-23 18: 49: 17Z
  5. Bu soruya gelen izleyicilerin yaklaşık% 80'i için bu en iyi cevap olacaktır. soruya bir cevap değil, bunun yerine soruna .
    2018-03-23 ​​11: 54: 06Z

İşte dizgiyi bir dizi olarak ele alarak ilk harfi alan popüler yanıtın kısaltılmış bir versiyonu:

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

Güncelleme:

Aşağıdaki yorumlara göre bu, IE 7 veya daha altında çalışmaz.

Güncelleme 2:

Boş dizeler için undefined'dan kaçınmak (bkz. @ njzk2 adlı kullanıcının yorumu ), boş bir dize denetleyebilirsiniz:

 
function capitalize(s)
{
    return s && s[0].toUpperCase() + s.slice(1);
}
    
262
2017-05-23 12: 34: 59Z
  1. Bu, IE’de çalışmayacak < 8, bu tarayıcılar dize dizin oluşturmayı desteklemediğinden. IE8 kendisini destekliyor, ancak yalnızca string değişmezleri için - string nesneleri için değil.
    2012-02-14 11: 33: 44Z
  2. Rakamlar IE ağlayacak ...
    2012-07-13 07: 47: 09Z
  3. kimin umrunda, IE7 piyasası% 5'ten az! ve bunlar muhtemelen sizin gremma ve grempa'nın eski makinesi. Kısa kod FTW diyorum!
    2012-12-03 06: 20: 35Z
  4. @ vsync Sadece kullanıcı demografik bilgilerinize bağlı olarak, bazen (2014 ve sonrasında geçtikçe minnetle daha az olsa da) IE7 gibi eski tarayıcıları desteklemenin karlı olduğunu kastetmiştim. ...
    2014-03-14 17: 47: 04Z
  5. @ njzk2, boş bir dize işlemek için şunu güncelleyebilir: return s && s[0].toUpperCase() + s.slice(1);
    2014-10-01 22: 38: 40Z

İşte en iyi çözümler:

İlk Çözüm CSS’de:

 
p {
  text-transform: capitalize;
}

İkinci çözüm :

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

Ayrıca String.prototype'a ekleyebilirsiniz, böylece diğer yöntemlerle zincirleyebilirsiniz:

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

ve bu şekilde kullanın:

 
'string'.capitalizeFirstLetter() // String

Üçüncü Çözüm :

 
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(" ");
}
    
165
2019-05-10 12: 47: 42Z
  1. string.replace(string[0], string[0].toUpperCase());'u çok daha kolay buldum
    2017-03-20 17: 46: 46Z
  2. Sadece bir kafa üstü - CSS çözümü ile büyük harfli karakter, metni seçerken Ubuntu'daki Chrome'da (muhtemelen diğer tarayıcılar da) görsel olarak seçilemez. Yine de seçilip Ctrl + C tuşlarına basarsanız metin kopyalanır.
    2017-07-25 10: 13: 16Z
  3. İkinci çözüm, yazdığınız gibi, dizenin geri kalanını küçük harf yapar. Bunu kaldırmak orijinal isteğe daha yakın olacaktır. ("Eyfel Kulesi", E ve T’deki büyük harfleri tutar)
    2017-09-01 07: 52: 49Z
  4. 1) Bu varyant CSS3 felsefesine uygun olduğundan ::first-letter iki kolon notasyonu kullanın, 2) daha iyi olduğu gibi .substring(…) yerine .slice(…) kullanın. performans, 3) OP diğer tüm karakterleri küçük harflerle yazmak istemedi, 4) Sahip olmadığınız nesnelerin prototipini değiştirmeyin
    2017-10-11 16: 50: 54Z
  5. Diğer harfleri küçük harflerle yazıyorsunuz, bu cevap yanlıştır yanlış.
    2018-07-01 02: 34: 21Z

Yayınlanan birkaç farklı yöntemin performansı ile ilgileniyorsanız:

İşte bu jsperf testini temel alan en hızlı yöntemler (en hızlıdan en yavaşa doğru sipariş edildi).

Gördüğünüz gibi, ilk iki yöntem performans açısından esasen karşılaştırılabilir, oysa String.prototype’u değiştirmek performans açısından en yavaş olanıdır.

 
// 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);
}

 buraya resim açıklamasını girin

    
158
2015-11-14 03: 26: 14Z
  1. Başlatma kodu ya da fark yaratmıyor gibi görünüyor: jsperf.com/capitalize-first-letter-of-string/2
    2016-03-22 17: 59: 15Z
  2. Ayrıca, .slice(1)'u .substr(1) ile değiştirmenin performansı daha da artıracağını unutmayın.
    2017-09-23 19: 37: 05Z
  3. Makul bir değerlendirme. Birçok durumda performans isabetinin göze çarpmayacağına dikkat edin:" En yavaş "yaklaşım bile, 19k dizesini 10 msn'de tutabilir. Bu nedenle, sizin için en rahat olanı kullanın.
    2018-10-23 19: 03: 15Z
  4. Kimsenin merak etmesi durumunda (benim gibi) bunun son dört yılda performansının nasıl arttığı, 2018 macbook pro'daki üçüncü işlevin ops /sn'si 135.307.869’da, yani esasen 12.4 kat daha hızlı.
    2019-01-18 09: 35: 15Z

Başka bir durumda, ilk harfi büyük harf yapmalı ve gerisini küçük harf almalıyım. Aşağıdaki durumlar bu işlevi değiştirmeme neden oldu:

 
//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();
    
143
2018-06-05 21: 49: 53Z
  1. "... ancak diğer harflerden herhangi birinin durumunu değiştirmedi". Bu OP'nin sorduğu soruya doğru bir cevap değil.
    2014-07-01 19: 31: 00Z
  2. @ CarlosMuñoz Açılış cümlesini okursanız, bunun farklı bir dava için olduğunu söylüyor.
    2014-09-05 08: 25: 33Z
  3. @ TomHart İşte bu yüzden soru için bir çözüm değil. Bir yorum ya da başka bir soru ve cevap olmalı
    2014-09-05 13: 38: 38Z
  4. Sizinle aynı fikirdeyim ama bu cevabın ne yaptığını öğrenmek isteyen birçok insanın burada olduğunu görebiliyorum.
    2014-09-05 13: 43: 21Z

Bu 2018 ECMAScript 6+ Çözümüdür :

 
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
    
63
2019-06-13 23: 03: 32Z
  1. .slice(), .substring()'dan daha yavaş, str[0], boş bir dize için undefined olur ve + burada tanıtılan iki bölümü tanıtmak için hazır bilgi şablonlarını kullanır,
    var string = "hello world";
    string = string.charAt(0).toUpperCase() + string.slice(1);
    alert(string);
    
    ise sadece 3 tanıtır .
    2018-06-04 08: 40: 50Z
  2. Cevabımın amacı Prz, ES6 destekli yeni özellikleri, özellikle diğer yazılarda belirtilmeyen hazır bilgi şablonlarını sergilemektir. StackOverflow'un fikri, arayıcıya “seçenekler” vermektir. Bu cevapta açıklanan Template Literals kavramını alabilir ve eğer uygulamalarının fazladan milisaniyesini gerektiriyorsa, Substring v. Slice gibi mikro-hız geliştirmeleri ile birleştirebilirler. Cevabım ayrıca hiçbir zaman bir StackOverflow yanıtını doğrudan kopyalamamanız gerektiğini gösteren bir Birim Testini de içermez. Geliştiricinin cevabımı alıp uyarlayacağını tahmin ediyorum.
    2018-06-05 14: 03: 05Z
 
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(" ");
}
    
62
2016-03-09 12: 50: 23Z

Bir dizedeki tüm kelimelerin ilk harfini büyük harfle yaz:  s => s.split(' ').map(x => x[0].toUpperCase() + x.slice(1)).join(' ')     

60
2016-04-21 06: 09: 45Z
  1. Yenidenokunan soru: Bir dizgenin ilk karakterini büyük harfle yazmak istiyorum, ancak diğer harflerden herhangi birinin durumunu değiştirmeyin.
    2011-11-30 19: 13: 07Z
  2. Yaptığımı biliyorum. Tüm dizgenin büyük harfle başlaması durumunda bir şey eklerdim: pieces [i] = j + pieces [i] .substr (1) .toLowerCase ();
    2012-12-20 21: 16: 13Z
  3. Bu vakanın başka bir çözümü: function capitaliseFirstLetters (s) {return s.split ("") .map (function (w) {return w.charAt (0) .toUpperCase () + w.substr (1)}). join ("")} Bir işleve alınmazsa güzel bir astar olabilir.
    2013-03-10 21: 36: 38Z
  4. İlk önce dizenin tamamını küçük harflerle yazmak daha iyi olur
    2016-07-06 10: 36: 01Z
  5. Soruya cevap vermeyen bu işlev dışında, aslında aşırı karmaşık. lodash
    2017-07-28 18: 10: 23Z

_.upperFirst('fred');
// => 'Fred'

_.upperFirst('FRED');
// => 'FRED'

_.capitalize('fred') //=> 'Fred'
'u zaten kullanıyorsanız (veya dikkate alıyorsanız) çözüm kolaydır:  _.camelCase('Foo Bar'); //=> 'fooBar'

Dokümanlarına bakın: https://lodash.com/docs#capitalize

_.lowerFirst('Fred');
// => 'fred'

_.lowerFirst('FRED');
// => 'fRED'

_.snakeCase('Foo Bar');
// => 'foo_bar'

https://lodash.com/docs/4.15.0#camelCase

 
function upperCaseFirst(str){
    return str.charAt(0).toUpperCase() + str.substring(1);
}

İlk büyük harf için Vanilya js:

 RegExp     
52
2016-12-08 07: 34: 12Z
  1. Çoğu insan yalnızca bir dizgenin büyük harflerini kullanmak için tüm çerçeveyi indirmeyeceğinden, tercihin vanilya J'ler için olması gerektiğini düşünüyorum.
    2015-12-06 23: 49: 20Z
  2. elbette, ancak çoğu insan muhtemelen önceden yüklüydü.
    2015-12-07 07: 20: 52Z
  3. Şimdiye kadar yaptığım tüm projelerimde asla lodash kullanmadım. Google’daki çoğu kişinin bu sayfada sona ereceğini ve alternatif olarak bir çerçevenin listelenmesinin iyi olduğunu, ancak ana cevap olarak olmadığını unutmayın.
    2015-12-08 14: 44: 54Z
  4. Diğer cevaplar vanilya js kullandığından, birçoğumuz lodash /underscore kullandığından, bunun gibi bir cevaba sahip olmak güzel.
    2016-12-07 16: 13: 40Z
  5. Bu, OP'nin şimdiden bir Javascript kütüphanesinde değil, Javascript'te yapmasını istediği gibi, doğru cevap değildir . projenize bağımlılık olarak. Kullanmayın.
    2017-02-22 01: 06: 22Z

En sevdiğim /^./'dan biriyle ilk karakteri bulabiliriz, tatlı bir surat gibi görünüyor:

String.prototype.capitalize = function () {
  return this.replace(/^./, function (match) {
    return match.toUpperCase();
  });
};
 
String::capitalize = ->
  @replace /^./, (match) ->
    match.toUpperCase()

Tüm kahve bağımlıları için:

 
var capitalize = function (input) {
  return input.replace(/^./, function (match) {
    return match.toUpperCase();
  });
};

... ve yerel prototipleri genişletmeden bunu yapmanın daha iyi bir yolu olduğunu düşünen herkes için:

 
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
}
    
46
2015-06-12 23: 11: 41Z
  1. Dize prototipini değiştirmeden bunu yapmanın daha iyi bir yolu var.
    2013-07-09 20: 42: 35Z
  2. @ davidkennedy85 Elbette! Ancak bu, basit yoldur, en iyisi yol değil ... ;-)
    2013-07-09 22: 01: 32Z
 
 "capitalize just the first word".capitalize(); ==> "Capitalize just the first word"
 "capitalize all words".capitalize(true); ==> "Capitalize All Words"

Ve sonra:

 
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

Yalnızca FUN için Nov.2016 (ES6) güncellemesi:

 capitalize("hello") // Hello

ardından const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();

    
46
2016-12-02 20: 29: 50Z
  1. Bunun 2 nedenden dolayı kötü bir çözüm olduğunu düşünüyorum: İlkel prototipini değiştirmek kötü bir fikirdir. Eğer özellik değişirse ve yeni bir proto mülkiyet adı olarak 'büyük harf' seçmeye karar verirlerse, temel dil işlevselliğini bozuyorsunuz. Ayrıca, seçilen yöntem adı yetersiz. İlk bakışta, bunun dizenin tamamını büyük harf kullanacağını düşünüyorum. PHP'nin ucFirst'i veya benzeri bir şey gibi daha açıklayıcı bir isim kullanmak daha iyi bir fikir olabilir.
    2017-02-22 01: 08: 08Z
  2. Diğer ES6 cevabı basittir:
    _.capitalize("foo bar") == "Foo bar"
    
    .
    2019-06-22 05: 50: 17Z

underscore.js veya Lo-Dash kullanıyorsanız >, underscore.string kütüphanesi, büyük harf dahil dize uzantıları sağlar:

  

_.capitalize (string) Dizenin ilk harfini şuna dönüştürür:   Büyük.

Örnek:

 _.capitalize("foo") === "Foo"     
44
2015-09-01 13: 50: 43Z
  1. Beri, sürüm 3.0.0 , Lo-Dash varsayılan olarak bu string metoduna sahiptir. Tıpkı bu cevapta açıklandığı gibi: humanize.
    2015-04-09 19: 09: 20Z
  2. Ayrıca
    p::first-letter {
      text-transform: uppercase;
    }
    
    olarak adlandırılan kullanışlı bir alt çizgi işlevi vardır. Vurgulu, deve veya kesikli bir ipi insanlaştırılmış olana dönüştürür. Ayrıca başlangıç ​​ve bitiş boşluklarını kaldırır ve '_id' postfix'sini kaldırır.
    2015-05-07 14: 11: 33Z
  3. Sürüm 4 * 'den Lodash ayrıca diğer harfleri de küçük harflerle yazdı (), dikkatli olun!
    2016-02-13 08: 33: 28Z

yalnızca CSS

 ::first-letter
  • %a olarak adlandırılmasına rağmen ilk karaktere uygulanır, yani % dizisi söz konusu olduğunda, bu seçici a için geçerlidir ve :first-letter büyük harf kullanılamaz.
  • IE9 + veya IE5.5 + 'da, yalnızca bir iki noktayla (
    const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
    
    ) eski gösterimde desteklenir.

ES2015 tek astar

Çok sayıda cevap olduğundan, ancak ES2015’te orijinal sorunu etkili bir şekilde çözecek hiçbir şey olmadığından, aşağıdakileri gördüm:

 parameters => function

Açıklamalar

  •  capitalizeFirstChar'a ok işlevi denir. li>
  • capitalizeFirstLetter yerine const ismiyle gittim, çünkü OP tüm dizgede ilk harfi büyük harf yapan bir kod istedi, ancak ilk karakter (eğer mektubu ise elbette).
  •  capitalizeFirstChar, string.charAt(0)'u sabit olarak bildirme becerisi veriyor; bu, bir programcı olarak her zaman niyetinizi açıkça belirtmeniz gerektiği için isteniyor.
  • Yaptığım kriterde string[0] ve string[0] arasında anlamlı bir fark yoktu. Ancak, undefined'un boş dize için string && string[0] olacağını, bu nedenle alternatife kıyasla çok ayrıntılı olan string.substring(1)'a yeniden yazılması gerektiğini unutmayın.
  •  string.slice(1), text-transform: uppercase;'dan daha hızlıdır.

Benchmark

  • 4.956.962 ops /s bu çözüm için ±% 3.03,
  • en çok oylanan cevap için 4.577.946 ops /s ±% 1.2.
  • JSBench.me ile oluşturuldu> Google Chrome 57’de.

 Çözümlerin karşılaştırması

    
39
2017-09-23 19: 24: 22Z
  1. var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);
    
    çalışmıyor.
    2017-10-03 19: 55: 31Z
  2. @ Yeşil: , seçiciyi iki sütunla belirttiğinizden emin misiniz?
    2017-10-05 16: 48: 16Z
  3. Aslında artı işaretini (+) ES6'da bir birleştirme yöntemi olarak kullanmak istemezsiniz. Şablon hazır bilgisini kullanmak isteyeceksiniz: eslint.org/docs/rules/prefer-template
    2018-03-19 15: 37: 27Z
 
<style type="text/css">
    p.capitalize {text-transform:capitalize;}
</style>
<p class="capitalize">This is some text.</p>
    
38
2016-08-25 12: 29: 11Z

CSS’de daha kolay görünüyor:

 :first-letter

Bu, CSS metin dönüştürme Mülkiyetinden emir > ( W3Schools adresinde).

    
37
2016-04-21 06: 09: 56Z
  1. @ Simon Dizginin bir HTML belgesinin parçası olarak çıktısı alınacağı belirtilmemiştir - CSS yalnızca kullanılıyorsa kullanılacaktır.
    2012-01-18 09: 32: 40Z
  2. Adam, doğru, ancak Javascript’in% 95’inden fazlasının HTML & CSS. Ne yazık ki, "büyük harf" ifadesi aslında her kelimeyi büyük harfle yazdığından, dizenin yalnızca ilk harfini büyük harf yapmak için JS’ye ihtiyacınız olacaktır.
    2012-01-21 04: 24: 39Z
  3. Yanlış, Puan. Dizenin ilk karakteri dedi.
    2012-06-26 00: 02: 22Z
  4. Bu cevap, saçma bir sayıdaki oy sayısına rağmen, yanlıştır, çünkü her kelimenin ilk harfini büyük yazacaktır. @Ryan, silerseniz bir Disiplinli rozet kazanacaksınız. Lütfen yapın.
    2012-11-07 06: 06: 50Z
  5. @DanDascalescu ile aynı fikirde - Ryan'ın cevabı tamamen yanlış.
    2012-11-14 13: 15: 33Z

Bu tür şeyleri her zaman ilk önce CSS kullanarak ele almak her zaman daha iyidir, genel olarak, CSS kullanarak bir şeyi çözebilirseniz, önce bunun için gidin, ardından sorunlarınızı çözmek için JavaScript'i deneyin CSS’de text-transform:capitalize;’u kullanmayı deneyin ve .first-letter-uppercase’u uygulayın

Bunun için bir sınıf oluşturmayı deneyin, böylece onu genel olarak kullanabilirsiniz, örneğin:

.first-letter-uppercase:first-letter {
    text-transform:capitalize;
}
ve CSS'inize aşağıdakine benzer bir şeyler ekleyin:  
function capitalizeTxt(txt) {
  return txt.charAt(0).toUpperCase() + txt.slice(1); //or if you want lowercase the rest txt.slice(1).toLowerCase();
}

Alternatif seçenek de JavaScript'tir, bu nedenle en iyisi şunun gibi olacak:

 
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'

ve şöyle arayın:

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

Tekrar tekrar tekrar kullanmak istiyorsanız, javascript yerel String'ine eklemek daha iyidir,

 
'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'

ve aşağıdaki gibi arayın:

 
function capitalize (text) {
    return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
    
37
2018-12-11 09: 16: 10Z

Tüm büyük harfli metni yeniden biçimlendirmek istiyorsanız, diğer örnekleri de şu şekilde değiştirmek isteyebilirsiniz:

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

Bu, aşağıdaki metnin değiştirilmesini sağlar:

 
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'
    
36
2016-04-21 06: 09: 19Z
  1. Muhtemelen bunun ayrıca kısaltmalar gibi şeyleri küçük harfe dönüştüreceğini de unutmayın, bu nedenle çoğu durumda en iyi fikir olmayabilir
    2016-04-25 05: 08: 23Z
  2. Ayrıca, GAMITG gerçekten yayının kod dışı bir kısmından bir parça beyaz boşluk kaldırmak için gerçekten bir düzenleme yaptı mı? O_O
    2016-08-28 03: 25: 05Z
  3. btw, bu, büyük harf kısaltmalarını kıracağı için hepinize dikkat edin < 3
    2019-03-15 21: 53: 43Z
 substr     
34
2015-07-14 19: 41: 19Z
  1. Lütfen kodu ve nasıl çalıştığını açıklayın
    2015-07-14 14: 47: 11Z
  2. Tamamlandı @Ram. Ayrıca örnekler de dahil edildi.
    2015-07-23 13: 14: 47Z
  3. Bu, 2009 yanıtından daha iyi nasıl olabilir?
    2019-01-27 22: 13: 30Z
  4. @DanDascalescu değil. substring /slice’un
    function ucfirst(str) {
        var firstLetter = str.substr(0, 1);
        return firstLetter.toUpperCase() + str.substr(1);
    }
    
    ’dan biraz daha anlamsal olduğunu iddia edersiniz, ama bu sadece bir tercih meselesi. Bununla birlikte, '09 örneğinde bulunmayan hoş bir dokunuş olan, soruda verilen dizelere örnekler de dahil ettim. Dürüst olmak gerekirse, StackOverflow; 'in karma olmasını isteyen 15 yaşına kadar kaynattığımı düşünüyorum.)
    2019-06-20 11: 50: 50Z

İşte ucfirst () adlı bir işlev ("büyük harf ilk harf" için kısa):

 
ucfirst("this is a test") --> "This is a test"

Bir dizeyi ucfirst ("some string") diyerek büyük harf yapabilirsiniz - örneğin,

 substr()

Dizeyi iki parçaya bölerek çalışır. İlk satırda firstLetter 'i çıkarır ve ikinci satırda firstLetter.toUpperCase () ' ı arayarak firstLetter 'ı büyük harfle yazıp dizginin geri kalan kısmı, str.substr (1) numaralı telefonu arayarak bulundu.

Bunun boş bir dize için başarısız olacağını ve gerçekten de C gibi bir dilde bunun için yiyecek ve içecek sağlamak zorunda kalacağını düşünebilirsiniz. Ancak, JavaScript’te, boş bir dizenin alt dizesini alırken, sadece boş bir dizge geri alırsınız.

    
30
2016-08-12 22: 36: 19Z
  1. String.substring () veya String.slice () kullanın ... substr () kullanmayın - bu kullanımdan kaldırılmıştır.
    2009-06-22 11: 11: 45Z
  2. @ 999: substr()'un kullanımdan kaldırıldığı nerede? Üç yıl sonra bile, değil , 2009 yılında bu yorumu yaptığınızda geri döndüm.
    2012-11-07 06: 12: 41Z
  3. substring, popüler bir ECMAScript uygulaması tarafından onaylanmadı olarak işaretlenmemiş olabilir (yakında herhangi bir zamanda kaybolmayacağından şüpheliyim), ancak ECMAScript belirtiminin bir parçası değil. Şartnamenin 3. basımı, "özellikleri veya anlamlarını bu standardın bir parçası yapmadan, bu tür mallar için tek biçimli anlambilim önermek" için normatif olmayan ekte belirtmektedir.
    2012-11-21 22: 05: 22Z
  4. Aynı şeyi yapan 3 yönteme sahip olmak (substr, slice ve slice) çok fazla, IMO. Her zaman slice kullanıyorum, çünkü negatif dizinleri destekliyor, kafa karıştırıcı arg-swapping davranışına sahip değil ve API diğer dillerde
    String.prototype.capitalize = function(){
        return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase();
        } );
    };
    
    'a benziyor.
    2012-11-21 22: 12: 12Z
 
capitalizedString = someString.capitalize();

Kullanım:

 return.this.toLocaleLowerCase().replace(

Bu bir metin dizesi = > Bu Bir Metin Dizesidir

    
28
2016-04-21 06: 08: 55Z
  1. Normal ifadeler bunun için gereğinden fazladır.
    2012-06-14 02: 40: 35Z
  2. + 1, aradığım şey buydu. Küçük bir hata olsa da, String.prototype.capitalize = function(){ return this.replace( /(^|\s)[a-z]/g , function(m){ return m.toUpperCase(); }); }; olmalı ...
    2013-01-14 21: 55: 51Z
  3. + 1, bu sayfayı phps ucfirst'in javascript versiyonunu ararken buldum, sanırım çoğu insanın nasıl bulduğunu sanıyorum.
    2013-04-09 13: 58: 12Z
  4. @ DanDascalescu Bunu faydalı buldum, bu yüzden +1 faydacılık ve -1 anal kalıcılığı. Bir örnek dahil etti, bu yüzden işlevi açık.
    2013-08-02 10: 24: 50Z
  5. var str = "test string";
    str = str.substring(0,1).toUpperCase() + str.substring(1);
    
    Kodunuzu biraz yeniden gözden geçirdim, yalnızca ilk eşleşmeye ihtiyacınız var.
    2014-04-28 16: 29: 38Z
 
'foo'.replace(/^./, str => str.toUpperCase())
    
27
2014-06-05 04: 26: 48Z

Bunu, değiştir 'e göre uygulamanın çok basit bir yolu var. ECMAScript 6 için:

 
'Foo'

Sonuç:

 
var stringVal = 'master';
stringVal.replace(/^./, stringVal[0].toUpperCase()); // returns Master 
    
24
2019-06-13 23: 02: 55Z
  1. Şimdiye kadar en iyi cevap ve regex lambda sözdizimini göstermek için ek puan. Özellikle bunu, her yerde akıcı bir kes ve yapıştır olabileceği için beğendim.
    2019-01-11 00: 14: 44Z

Bu çözüme göz atın:

 stringVal.replace(/^./, stringVal[0].toUpperCase());     
21
2015-10-31 09: 49: 01Z
  1. Bu kabul edilen cevap olmalıdır. Ana çözüm, alt çizgi gibi bir çerçeve kullanmamalı.
    2015-09-26 07: 58: 02Z
  2. Bazı tuş vuruşlarını kaydet;) stringVal[0]
    2015-10-15 19: 30: 27Z
  3. Evet, bu da işe yarıyor.
    2015-10-26 20: 54: 47Z
  4. Regex gerekli olmadığında kullanılmamalıdır. Oldukça verimsiz ve kodları da özlü hale getirmiyor. Dahası, undefined, stringVal nolu boş için .toUpperCase() olur ve
    yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });
    
    nolu özelliğe erişme denemesi bir hata verir.
    2017-09-23 19: 28: 17Z
 ucfirst

(Sık kullandıysanız, onu bir işlevde saklayabilir veya Dize prototipine ekleyebilirsiniz.)

    
19
2016-08-12 22: 38: 32Z
  1. Bu oldukça oy kullanmasına rağmen, bu, burada yayınlanan en yavaş çözüm. Bu yazının en popüler cevapları ile biraz hızlı bir şekilde bir araya getirdim, burada: forwebonly.com/…
    2013-02-13 13: 17: 16Z
  2. @ RobinvanBaalen Bağlantınız koptu. Güncellenmiş bir tane var mı?
    2017-01-23 03: 29: 12Z
  3. Regexp bunun için çok yardımcı oldu, daha basit olmasını tercih edin: str.charAt (0) .toUpperCase () + str.slice (1)
    2017-01-23 13: 36: 38Z
  4. @ Brad ne yazık ki değil
    2017-01-23 18: 54: 18Z
  5. Genellikle, sorununuzu regex ile çözmek istiyorsanız, iki sorunla karşılaşırsınız.
    2017-09-23 19: 18: 54Z

function ucfirst(str) {
    var firstLetter = str.slice(0,1);
    return firstLetter.toUpperCase() + str.substring(1);
}
işlevi bu şekilde yaparsanız çalışır.  string[0].toUpperCase() + string.substring(1)

Açıklama için teşekkürler J-P.

    
17
2016-04-21 06: 08: 42Z
  1. işlev için güzel ad! Adı PHP eşdeğeri ile aynıdır. Aslında JS'de yazılmış bir PHP fonksiyon kütüphanesi var; PHP.js olarak adlandırılır ve http://phpjs.org
    adresinde bulunur.
    2011-12-08 14: 29: 12Z
  2. Bir liner: (string[0] || '').toUpperCase() + string.substring(1)
    2015-11-25 04: 01: 07Z
  3. @ URL Hussam olarak değiştirildi: locutusjs.io
    2016-05-05 10: 08: 54Z
  4. @ dr.dimitru boş dize ile çalışmayacak
    2016-05-06 16: 25: 17Z
  5. @ Burada TarranJones kurşun geçirmez bir astar:
    yourString.replace(/\w/, c => c.toUpperCase())
    
    2016-05-06 18: 20: 35Z
 \w

Bu ok işlevini en kolay buldum. Değiştir , ilk harf karakteriyle eşleşir ( Dizenizdeki /./) büyük harfe dönüştürür. Hiçbir meraklısı gerekli değil.

    
16
2018-07-14 19: 40: 37Z
    Bu kabul edilen cevap olmalı, SO neredeyse modası geçmiş sorular almaya devam ettiğinden beri neredeyse sonuncusu. Btw, /\w/'u iki nedenden ötürü kullanmak daha iyidir:
    var str = "ruby java";
    
    console.log(str.charAt(0).toUpperCase() + str.substring(1));
    önceki tüm harf karakterlerini atlayacaktır (yani @@ abc, @@ Abc olacaktır) ve sonra latin olmayan karakterlerle çalışmaz
    2019-04-29 18: 01: 22Z

Kullanım:

 "Ruby java"

Konsola

string[0].toUpperCase() + string.substring(1)
çıkış verecek.     
16
2019-06-13 23: 11: 38Z
  1. Şimdi olduğu gibi hiçbir şey döndürmeyecek.
    2014-09-25 17: 13: 28Z
  2. @ Sébastien jsfiddle kaynak ve sonuç bağlantısını ekledim
    2014-09-25 17: 21: 08Z
  3. Yukarıdakilerin en kolay olduğunu düşünüyorum ve herkes bunu tarayıcı konsolunda kontrol edebilir
    2019-06-20 03: 50: 49Z

Bunu böyle bir satırda yapabilirsiniz

      
15
2018-01-22 18: 27: 10Z
  1. Bu cevap zaten 2009'da verildi.
    2019-01-27 22: 11: 28Z
kaynak yerleştirildi İşte
Diğer sorular
6
“Vektörleşme” nedir?
diye sordu 10 yıl önce