Javascript-də yuxarı halda bir simli ilk məktubunu necə etmək olar?

Üstündəki bir simli ilk məktubunu necə etmək olar, ancaq digər hərflərin vəziyyətini dəyişmir?

Məsələn:

  • "this is a test""this is a test"
  • "the Eiffel Tower""the Eiffel Tower"
  • "/index.html""/index.html"
3226
22 июня '09 в 11:25 2009-06-22 11:25 Robert Wills 22 iyun 'da 11:25' də soruşdu, 2009-06-22 11:25
ответ 81 cavab
  • 1
  • 2
  • 3
 function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } 

Bəzi digər cavablar String.prototype (bu cavab da istifadə olunur) dəyişdirmək, lakin qorunması (çünki funksiyası prototype əlavə yerləşir çətin və digər kodu eyni adı / brauzer əlavə edərsə münaqişələrə səbəb ola bilər) eyni adı ilə gələcək öz funksiyası).

5080
22 июня '09 в 11:30 2009-06-22 11:30 Steve Harrison'a 22 İyun '09 'da 11:30' da cavab verildi 2009-06-22 11:30

Daha çox obyekt yönümlü yanaşma:

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

Və sonra:

 "hello world".capitalize(); => "Hello world" 
1236
20 июля '10 в 18:51 2010-07-20 18:51 Cavab Steve Hansell tərəfindən 20 İyul, '10 'da saat 18:51' da verildi. 2010-07-20 18:51

CSS-də:

 p:first-letter { text-transform:capitalize; } 
448
17 июля '12 в 17:06 2012-07-17 17:06 cavab 17 iyul 2012-ci il tarixində saat 17: 06 -da verilir

Burada ilk məktubu alan, simli bir array kimi davranan məşhur cavabın kısaltılmış bir versiyası:

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

Yeniləmə:

Aşağıdakı şərhlərə görə, bu, IE 7 və ya aşağıda işləmir.

Update 2:

Boş xətlər üçün undefined edilməməsi üçün ( aşağıda @ njzk2 şərhinə baxın ) boş satırı yoxlaya bilərsiniz:

 function capitalize(s) { return s  s[0].toUpperCase() + s.slice(1); } 
250
29 авг. joelvh tərəfindən verilmiş cavab Aug 29 2011-08-29 02:03 '11 'də 2:03' də 2011-08-29 02:03

Bir neçə nəşr metodunun yerinə yetirilməsində maraqlıysanız:

Bu jsperf testinə əsaslanan ən sürətli üsullar (ən sürətli və ən yavaş sifariş).

Gördüyünüz kimi, ilk iki üsul əsasən performans baxımından müqayisə edilir, String.prototype dəyişməsi isə performans baxımından ən String.prototype .

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

2019

14 нояб. Cavab Josh Crozier tərəfindən verilir. 2015-11-14 06:26 '15 at 6:26 'də 2015-11-14 06:26

Bir başqa hal üçün, mənə ilk məktubun başlığına, altına isə qalana ehtiyacım var. Aşağıdakı hallarda mənə bu xüsusiyyət dəyişdirildi:

 //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(); 
137
19 июля '13 в 21:17 2013-07-19 21:17 Cavab 19 iyul 2013-cü il saat 21:17 tarixində alejandro tərəfindən verilmişdir 2013-07-19 21:17

İşdə ən yaxşı həllər:

CSS-də ilk həll :

 p { text-transform: capitalize; } 

İkinci həll :

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

String.prototype ə əlavə edə bilərsiniz, belə ki String.prototype onu digər yollarla da edə bilərsiniz:

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

və bu kimi istifadə:

 'string'.capitalizeFirstLetter() // String 

Üçüncü həll :

 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(" "); } 
134
16 февр. Kamil İbadovun cavabı 16 fevral. 2017-02-16 08:30 '17 saat 8:30 'də 2017-02-16 08:30 ' a qədər
 var string = "hello world"; string = string.charAt(0).toUpperCase() + string.slice(1); alert(string); 
63
17 июля '13 в 9:23 2013-07-17 09:23 Cavab Anup tərəfindən 17 iyul 'da saat 9:23' da verilir 2013-07-17 09:23

Xətt içindəki bütün sözlərin ilk məktubunu yazın:

 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(" "); } 
58
30 нояб. Cavab Dan 30 Noyabr. 2011-11-30 20:16 '11 at 20:16 2011-11-30 20:16

Bu, 2018 ES6 + həllidir :

54
19 марта '18 в 18:32 2018-03-19 18:32 Cavab Sterling Bourne tərəfindən 19 Mart 1918 ' də 18:32 2018-03-19 18:32' də verilir

Əgər siz artıq istifadə lodash (və ya nəzərə alsaq), həll asan:

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

Sənədlərinə baxın: 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' 

İlk üst halda Vanilla js:

 function upperCaseFirst(str){ return str.charAt(0).toUpperCase() + str.substring(1); } 
50
29 нояб. Cavab 29 noyabrda verilir. 2015-11-29 11:13 '15 at 11:13 2015-11-29 11:13
 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 } 

Və sonra:

  "capitalize just the first word".capitalize(); ==> "Capitalize just the first word" "capitalize all words".capitalize(true); ==> "Capitalize All Words" 

Nov.2016 (ES6) yeniləyin, yalnız FUN üçün:

 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 

sonra capitalize("hello") // Hello

45
29 нояб. Cavab Abdennour TOUMI tərəfindən 29 noyabrda verilir 2013-11-29 23:01 '13 'da 23:01' də 2013-11-29 23:01

İlk karakterimizi sevdiyim RegExp biri ilə ala RegExp , bir cute /^./ kimi görünür: /^./

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

Və bütün bağımlıları üçün:

 String::capitalize = -> @replace /^./, (match) -> match.toUpperCase() 

... və öz prototiplərini genişləndirmədən bunu etmək üçün daha yaxşı bir yol olduğunu düşünən bütün uşaqlar üçün:

 var capitalize = function (input) { return input.replace(/^./, function (match) { return match.toUpperCase(); }); }; 
45
15 февр. cavab 15 fevral. 2013-02-15 09:55 '13 saat 09:55 'da 2013-02-15 09:55

Underscore.js və ya Lo-Dash istifadə edin, altçizgi.string capize daxil olmaqla simli uzantıları təmin edir:

_. capitalize (string) Bir stringun ilk harfi böyükdür.

Məsələn:

 _.capitalize("foo bar") == "Foo bar" 
43
12 июня '14 в 11:00 2014-06-12 11:00 Cavab 12 İyun '14 'də saat 11: 00-da başlayacaq
 var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1); 
37
25 авг. Cavab zianwar 25 aug verilir . 2016-08-25 15:29 '16 'da 3:29' de 2016-08-25 15:29

Yalnız CSS

 p::first-letter { text-transform: uppercase; } 
  • Buna baxmayaraq ::first-letter , ilk növbədə tətbiq olunur. yəni %a xəttinin vəziyyətində, bu seçici % tətbiq olunacaq və beləliklə kapitallaşdırılmayacaqdır.
  • IE9 + və ya IE5.5 + -də yalnız bir ədəd ( :first-letter ) ilə musiqi nişanında dəstəklənir.

ES2015 tək xətt

Çox cavablar var, ancaq ES2015-də orijinal problemi effektiv həll edənlər olmur, mən aşağıdakılarla gəldim:

 const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1); 

Qeydlər

  • parameters => function ox funksiyası deyilir.
  • Məncə, bütün xəttindəki ilk məktubu idarə edən kodu tələb etməmişdi, amma ilk məktub (əlbəttə, bu məktub olarsa), çünki capitalizeFirstChar əvəzinə capitalizeFirstChar adını capitalizeFirstChar .
  • const , bizi istənilən bir sabit olaraq " const ı elan etmə fürsəti verir. Çünki bir proqramçı olaraq həmişə niyyətinizi açıq şəkildə ifadə etməlisiniz.
  • string.charAt(0) string[0] arasında anlamlı bir fark string.charAt(0) . Bununla bərabər, string[0] boş bir simli üçün undefined edilməyəcəkdir. Buna alternativlə müqayisədə çox çətin olan string string[0] yazılmalıdır.
  • string.substring(1) string.slice(1) dən daha sürətli string.slice(1) .

Qiymətləndirmə

  • Bu həll üçün 4.956.962 ops / s ± 3.03%
  • Ən çox səs verilən cavab üçün 4,577,946 ops / s ± 1,2%.
  • Google Chrome 57-də JSBench.me -dən yaradılıb.

2019

05 апр. Cavab verilir Przemek 05 Apr 2017-04-05 20:21 '17 saat 20:21 'də 2017-04-05 20:21

Bütün mətni yenidən formatlaşdırmaq istəyirsinizsə, digər nümunələri belə dəyişə bilərsiniz:

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

Bu, aşağıdakı mətni dəyişəcəkdir:

 TEST => Test This Is A TeST => This is a test 
35
08 авг. Cavab monokrom 08 aug verilir . 2011-08-08 19:55 '11 at 19:55 2011-08-08 19:55

CSS daha sadə görünür:

 <style type="text/css"> p.capitalize {text-transform:capitalize;} </style> <p class="capitalize">This is some text.</p> 

Bu CSS mətn çevirmə mülkiyyətindən ( W3Schools ).

35
09 дек. Cavab Ryan 09 dekabrda verilir. 2011-12-09 03:27 '11 at 3:27 2011-12-09 03:27
 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' 
33
13 июля '15 в 23:34 2015-07-13 23:34 cavab Fredrik A. tərəfindən verilir. 13 iyul, saat 23:34 'da 23:34 2015-07-13 23:34

CSS ilə bir şey həll edə bilərsən, ilk növbədə bunu həll etsəniz, sonra problemləri həll etmək üçün JavaScript cəhd edin, belə ki, bu halda istifadə edin :first-letter CSS :first-lettertext-transform:capitalize; tətbiq etmək text-transform:capitalize;

Beləliklə, bunun üçün bir sinif yaratmaq üçün cəhd edin, belə ki, siz onu qlobal şəkildə istifadə edə bilərsiniz, məsələn: .first-letter-uppercase birinci .first-letter-uppercase və CSS-ə aşağıdakı kimi bir şey əlavə edin:

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

JavaScript də alternativdir, belə ki, bu kimi bir şey yaxşı olardı:

 function capitalizeTxt(txt) { return txt.charAt(0).toUpperCase() + txt.slice(1); //or if you want lowercase the rest txt.slice(1).toLowerCase(); } 

və bu kimi ad:

 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' 

Yenidən istifadə etmək istəyirsinizsə, onu doğma javascript String'e əlavə etmək daha yaxşıdır, belə ki, aşağıdakı kimi bir şey:

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

və aşağıdakıları adlandırın:

 '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' 
31
14 мая '17 в 11:12 2017-05-14 11:12 Cavab Əlireza tərəfindən 14 May '17 'də saat 11:12' də veriləcək 2017-05-14 11:12
 String.prototype.capitalize = function(){ return this.replace( /(^|\s)([az])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); }; 

İstifadə edin:

 capitalizedString = someString.capitalize(); 

Bu mətnli bir düsturdur => Bu bir mətn şeridi

27
15 дек. 15 dekabrda Murat Kucukosman tərəfindən cavab verildi. 2010-12-15 13:15 '10 'da 13:15' da 2010-12-15 13:15

Burada ucfirst () ("birinci məktubun ilk harfi" üçün ) adlı bir funksiya var:

 function ucfirst(str) { var firstLetter = str.substr(0, 1); return firstLetter.toUpperCase() + str.substr(1); } 

Siz simli ucfirst ("bəzi string") istifadə edə bilərsiniz, məsələn,

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

Xəttin iki hissəyə bölünməsi ilə işləyir. Birinci satırda, ilkLetter çıxardır , sonra ikinci satırda firstLetter istifadə edir , firstLetter.toUpperCase () çağırır və str.substr (1) çağıraraq tapıla bilən xəttin qalan hissəsinə əlavə edir.

Budur, bu, boş bir simli üçün bir səhv gətirə biləcəyini və həqiqətən, C kimi bir dildə də düşünə bilərsən ki, onu təmin etməlisiniz. Lakin, JavaScript-də, bir boş simli bir substring aldığınızda, sadəcə bir boş simli döndürür.

26
22 июня '09 в 11:33 2009-06-22 11:33 Cavab Robert Wills tərəfindən 22 iyun 'da 11:33' də verildi
 var str = "test string"; str = str.substring(0,1).toUpperCase() + str.substring(1); 
26
06 мая '14 в 8:15 2014-05-06 08:15 cavab Səlim 06 May '14 saat 8:15 'də verilir 2014-05-06 08:15

Bu həllini qoruyun:

 var stringVal = 'master'; stringVal.replace(/^./, stringVal[0].toUpperCase()); // returns Master 
20
23 авг. Raju Bera tərəfindən verilmiş cavab 23 avqust. 2015-08-23 15:51 '15 at 15:51 2015-08-23 15:51
 yourString.replace(/^[az]/, function(m){ return m.toUpperCase() }); 

(Siz tez-tez istifadə etdiyiniz təqdirdə onu bir funksiyaya əlavə edə bilərsiniz və ya bir prototip String əlavə edə bilərsiniz.)

18
19 нояб. Cavab 19 noyabrda Simon tərəfindən verilir. 2012-11-19 21:33 '12 at 21:33 2012-11-19 21:33

Əgər belə bir şey varsa, ucfirst funksiyası işləyir.

 function ucfirst(str) { var firstLetter = str.slice(0,1); return firstLetter.toUpperCase() + str.substring(1); } 

Bölüşmək üçün JP-ə təşəkkür edirəm.

16
19 авг. Cavab 19 oktyabrda verilir . 2010-08-19 00:07 '10 at 0:07 2010-08-19 00:07

Bunu belə bir xəttdə edə bilərsiniz

 string[0].toUpperCase() + string.substring(1) 
14
22 янв. cavab Qwerty Jan 22 verilir 2018-01-22 21:27 '18 at 21:27 2018-01-22 21:27
Şerinizin ilk hərfinin ( \w ) xarakterini dəyişdirin və yuxarı vəziyyətə çevirin.  Xüsusi bir şey lazım deyil. 

14
14 июля '18 в 22:40 2018-07-14 22:40 cavab iyulun 14-də saat 18: 00-da saat 10: 40-da 2018-07-14 22:40 ilə verilir

Bunu əvəz etməklə həyata keçirmək üçün çox sadə bir yol var. ES6 üçün:

 'foo'.replace(/^./, str => str.toUpperCase()) 

nəticə:

 'Foo' 
14
08 нояб. Cavab Little Roys tərəfindən verilir. 2018-11-08 11:31 '18; 11:31 ; 2018-11-08 11:31

CoffeeScript- də prototipə xətləri əlavə edin:

 String::capitalize = -> @substr(0, 1).toUpperCase() + @substr(1) 

İstifadə edin:

 "woobie".capitalize() 

Nə verir:

 "Woobie" 
12
15 авг. cavab 15 dəqiqə uzun verilir . 2012-08-15 21:06 '12 at 21:06 2012-08-15 21:06
  • 1
  • 2
  • 3

tags ilə əlaqəli digər suallar və ya sual