ජාවාස්ක්‍රිප්ට් හි නූලක ලොකු අකුරක පළමු අකුර සාදා ගන්නේ කෙසේද?


3774

නූලක ලොකු අකුරක පළමු අකුර සාදා ගන්නේ කෙසේද, නමුත් වෙනත් අක්ෂරවල නඩුව වෙනස් නොකරන්නේ කෙසේද?

උදාහරණයක් වශයෙන්:

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

13
අන්ඩර්ස්කෝර් සතුව underscore.string නම් ප්ලගිනයක් ඇත , එයට මෙය සහ තවත් විශිෂ්ට මෙවලම් සමූහයක් ඇතුළත් වේ.
ආරොන්

112
string[0].toUpperCase() + string.substring(1)
සරලයි

8
`${s[0].toUpperCase()}${s.slice(1)}`
noego

1
([initial, ...rest]) => [initial.toUpperCase(), ...rest].join("")
Константин Ван

2
සෑම වචනයක්ම ප්‍රාග්ධනීකරණය කරන්න:str.replace(/(^\w|\s\w)/g, m => m.toUpperCase())
කුකුළන්

Answers:


5821

මූලික විසඳුම:

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

console.log(capitalizeFirstLetter('foo')); // Foo

තවත් සමහර පිළිතුරු වෙනස් කරයි String.prototype(මෙම පිළිතුර ද භාවිතා කර ඇත), නමුත් නඩත්තු කිරීමේ හැකියාව නිසා මම දැන් එයට එරෙහිව උපදෙස් දෙමි (ශ්‍රිතය කොතැනට එකතු වේදැයි සොයා ගැනීමට අපහසු වන අතර prototypeවෙනත් කේත එකම නමක් / බ්‍රව්සරයක් භාවිතා කරන්නේ නම් ගැටුම් ඇති විය හැක. අනාගතයේදී එම නම සමඟම ස්වදේශීය ශ්‍රිතයක් එක් කරයි).

... එවිට, ජාත්‍යන්තරකරණය සලකා බැලීමේදී මෙම ප්‍රශ්නයට තවත් බොහෝ දේ ඇත, මෙම විශ්මය ජනක හොඳ පිළිතුර ලෙස (පහත වළලනු ලැබේ) පෙන්නුම් කරයි.

කේත ඒකක වෙනුවට යුනිකෝඩ් කේත ලක්ෂ්‍ය සමඟ වැඩ කිරීමට ඔබට අවශ්‍ය නම් (නිදසුනක් ලෙස මූලික බහුභාෂා ගුවන්යානයෙන් පිටත යුනිකෝඩ් අක්ෂර හැසිරවීමට) ඔබට String#[@iterator]කේත ලක්ෂ්‍ය සමඟ ක්‍රියා කරන කාරණය උත්තේජනය කළ හැකි අතර , ඔබට toLocaleUpperCaseස්ථානීය-නිවැරදි ඉහළ අකුරු ලබා ගැනීමට භාවිතා කළ හැකිය:

function capitalizeFirstLetter([ first, ...rest ], locale = navigator.language) {
  return [ first.toLocaleUpperCase(locale), ...rest ].join('');
}

console.log(capitalizeFirstLetter('foo')); // Foo
console.log(capitalizeFirstLetter("𐐶𐐲𐑌𐐼𐐲𐑉")); // "𐐎𐐲𐑌𐐼𐐲𐑉" (correct!)
console.log(capitalizeFirstLetter("italya", 'tr')); // İtalya" (correct in Turkish Latin!)

ඊටත් වඩා ජාත්‍යන්තරකරණ විකල්ප සඳහා, කරුණාකර පහත මුල් පිළිතුර බලන්න .


10
උපස්ථරයට වඩා බ්‍රව්සර් වලින් උපස්ථරය තේරුම් ගත හැකිය
mplungjan

7
karim79 වෙත එක් කිරීමට - එය ජාවාස්ක්‍රිප්ට් ලෙස ශ්‍රිතයක් බවට පත් කිරීම සඳහා අධික ලෙස මරා දැමීම ශ්‍රිතය එතීමෙන් තොරව විචල්‍යයට එකම දේ කරයි. ශ්‍රිතයක් භාවිතා කිරීමෙන් එය වඩාත් පැහැදිලි වනු ඇතැයි මම සිතමි, නමුත් එහි ස්වදේශිකයා වෙනත් ආකාරයකින්, එය ශ්‍රිත එතීමකින් සංකීර්ණ කරන්නේ ඇයි?
රොස්

19
අපි (1) පෙත්ත ලිවර් කේස් කළ යුතු නොවේද?
hasen

178
නැත, OP මෙම උදාහරණය ලබා දුන් නිසා : the Eiffel Tower -> The Eiffel Tower. ප්ලස්, ශ්‍රිතය හැඳින්වෙන්නේ capitaliseFirstLetterනැත capitaliseFirstLetterAndLowerCaseAllTheOthers.
තහනම-භූ ඉංජිනේරුකරණය

23
OOP හි වැදගත් රීතිය ගැන කිසිවෙකු තැකීමක් නොකරයිද? - ඔබට අයිති නැති වස්තු කිසි විටෙකත් සංස්කරණය නොකරන්න? . BTW, මෙම එක්-ලයිනර් වඩාත් අලංකාර පෙනුමක්:string[0].toUpperCase() + string.substring(1)
dr.dimitru

1351

මෙන්න වඩාත් වස්තු-නැඹුරු ප්‍රවේශයකි:

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

ඔබ ශ්‍රිතය අමතන්නේ, මේ ආකාරයට ය:

"hello world".capitalize();

අපේක්ෂිත ප්‍රතිදානය සමඟ:

"Hello world" 

24
මම මේ විසඳුමට කැමතියි එය රූබි වගේ, රූබි මිහිරි! :) මම අනෙක් සියලුම අකුරු කුඩා අකුරින් ලියන අතර එය හරියටම රූබි මෙන් ක්‍රියා කරයි:return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
ma11hew28

165
මෙම පශ්චාත්-ප්‍රෝටෝටයිප්.ජේ ලෝකයේ, ස්වදේශීය වස්තූන් වෙනස් කිරීමට හෝ දිගු කිරීමට යෝජනා නොකරයි.
රයන්

191
xrxgx - "දිගු නොකරන්න" බූගීමන් දැන් මැරෙන්නට පටන් ගෙන ඇත (දෙවියන්ට ස්තූතියි), මිනිසුන් jSand වෙතින් හිස එළියට ඇද එය භාෂා අංගයක් බව වටහා ගනී. Prototype.js වස්තුව කෙටි කාලයක් සඳහා දීර් extended කළ පමණින්, ස්වදේශිකයන් දිගු කිරීම නරක යැයි අදහස් නොකෙරේ. ඔබ නොදන්නා පාරිභෝගිකයෙකු සඳහා කේතයක් ලියන්නේ නම් (අහඹු අඩවි වල විශ්ලේෂණ පිටපතක් වැනි) ඔබ එය නොකළ යුතුය, නමුත් එය හැර එය හොඳයි.
csuwldcat

44
scsuwldcat ඔබ නොදැනුවත්වම ඔබ භාවිතා කරන තවත් පුස්තකාලයක් එහි ප්‍රාග්ධනීකරණය එකතු කළහොත් කුමක් කළ යුතුද? Prototype.js එය කළාද නැද්ද යන්න නොසලකා මූලාකෘති දිගු කිරීම නරක ස්වරූපයකි. ES6 සමඟින්, ඔබේ කේක් එක තබා එය අනුභව කිරීමට සහජ බුද්ධිය ඔබට ඉඩ සලසයි. ECMASCRIPT පිරිවිතරයට අනුකූල වන ෂිම් නිර්මාණය කරන පුද්ගලයින් සඳහා ඔබ "බූගීමන්" මියයෑම ව්‍යාකූල කරනු ඇතැයි මම සිතමි. ෂිම් එකතු කළ තවත් පුස්තකාලයක් එය ඒ ආකාරයෙන්ම ක්‍රියාත්මක කරන බැවින් මෙම ෂිම් ඉතා හොඳයි. කෙසේ වෙතත්, ඔබේම පිරිවිතර නොවන අභ්‍යන්තරය එකතු කිරීම වළක්වා ගත යුතුය.
ජස්ටින් මේයර්

44
ස්වදේශිකයන් දීර් ing කිරීම අතිශයින්ම නරක පුරුද්දකි. "අනේ මම කවදාවත් මේ කේතය වෙන කිසිම දෙයක් සමඟ භාවිතා කරන්නේ නැහැ" යැයි ඔබ පැවසුවද, ඔබ (හෝ වෙනත් අයෙකු) බොහෝ විට එසේ කරනු ඇත. ඔබේ අනෙක් පුස්තකාලයට වඩා මදක් වෙනස් මුදල් සමඟ ගනුදෙනු කිරීම සඳහා යමෙකු අංක. මුදල් () දීර් extended කර ඇති නිසා ඔවුන් අමුතු ගණිත දෝෂයක් හඳුනා ගැනීමට දින තුනක් ගත කරනු ඇත. බරපතල ලෙස, මෙය විශාල සමාගමක සිදුවන බව මම දැක ඇති අතර, ස්වදේශිකයන්ගේ මූලාකෘති සමඟ අවුල් වී ඇති පුස්තකාලයක් සොයා ගැනීමට කිසිවෙකුගේ කාලය නිදොස් කිරීම වටී නැත.
phreakhead

576

CSS හි:

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

80
OP JS විසඳුමක් ඉල්ලයි.
ඇන්ටෝනියෝ මැක්ස්

129
text ('# mystring_id'). පෙළ (නූල්) .css ('පෙළ-පරිවර්තනය', 'ප්‍රාග්ධනීකරණය');
DonMB

21
මීට අමතරව, මෙය බලපාන්නේ නූල් ප්‍රදර්ශනය කිරීමට පමණි - සත්‍ය අගය නොවේ. එය ආකෘතියකින් නම්, උදා., අගය තවමත් පවතින ආකාරයටම ඉදිරිපත් කෙරේ.
dmansfield

12
මා කරන දෙයට CSS විසඳුමක් වඩාත් සුදුසු බව තේරුම් ගැනීමට මෙම පිළිතුර මට උපකාර විය. ude ඩුඩ්වාඩ්: පිළිතුර බොහෝ විට මෙය JS විසඳුමක් නොවන නමුත් අවශ්‍යතාවය අනුව වඩාත් යෝග්‍ය විය හැකි බවට වියාචනය ලබා දිය යුතුය.
ජොෂ්ඩන්

58
මෙම ප්‍රශ්නයට පැමිණෙන නරඹන්නන්ගෙන් ආසන්න වශයෙන් 80% ක් සඳහා, මෙය හොඳම පිළිතුර වනු ඇත. සඳහා පිළිතුරු නැති ප්රශ්න , නමුත් කිරීමට ප්රශ්නය වෙනුවට.
ජීවන්

291

නූල් අරාව ලෙස සලකමින් පළමු අකුර ලබා ගන්නා ජනප්‍රිය පිළිතුරේ කෙටි අනුවාදය මෙන්න:

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

යාවත්කාලීන කිරීම:

පහත දැක්වෙන අදහස් වලට අනුව මෙය IE 7 හෝ ඊට පහළින් ක්‍රියා නොකරයි.

යාවත්කාලීන 2:

undefinedහිස් නූල් වලක්වා ගැනීම සඳහා (පහත j njzk2 ගේ අදහස බලන්න ), ඔබට හිස් නූලක් පරීක්ෂා කළ හැකිය:

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

23
IE <8 හි මෙය ක්‍රියා නොකරනු ඇත, එම බ්‍රව්සර් නූල් සුචිගත කිරීම සඳහා සහය නොදක්වයි. IE8 විසින්ම එයට සහය දක්වයි, නමුත් නූල් වචනාර්ථ සඳහා පමණි - නූල් වස්තු සඳහා නොවේ.
මතියස් බයිනස්

52
කවුරුන් සැලකිලිමත්ද, IE7 වෙළඳපොළ 5% ට වඩා අඩුය! ඒවා බොහෝ විට ඔබේ ග්‍රෙමාගේ සහ ග්‍රෙම්පාගේ පැරණි යන්ත්‍රය විය හැකිය. මම කියන්නේ කෙටි කේතය FTW!
vsync

Ati මතියස්බයිනන්ස් මෙය පැරණි IE නොවන බ්‍රව්සර් වලට හෝ IE7 ට පමණක් බලපානවාදැයි ඔබ දන්නවාද? 2014 දී වචන වචනාර්ථයෙන් සුචිගත කිරීමෙන් වෙනත් බ්‍රව්සර් වලට බලපෑමක් සිදු නොවන්නේ නම් අප හොඳින් විය යුතුය. :)
hexalys

3
svsync මම අදහස් කළේ ඔබේ පරිශීලක සංඛ්‍යාලේඛන මත පදනම්ව, සමහර විට (අපි 2014 සහ ඉන් ඔබ්බට ගිය විට කෘත fully පූර්වකව අඩු හා අඩු වුවද) IE7 වැනි පැරණි බ්‍රව්සර් සඳහා සහය දැක්වීම ලාභදායී වේ ...
joshuahedlund

2
string njzk2 හිස් නූලක් හැසිරවීමට, ඔබට මෙය යාවත්කාලීන කළ හැකිය: return s && s[0].toUpperCase() + s.slice(1);
joelvh

188

පළ කරන ලද විවිධ ක්‍රම කිහිපයක ක්‍රියාකාරිත්වය ගැන ඔබ උනන්දු නම්:

මෙම jsperf පරීක්ෂණය මත පදනම් වූ වේගවත්ම ක්‍රම මෙන්න (වේගවත් සිට මන්දගාමී දක්වා ඇණවුම් කර ඇත).

ඔබට පෙනෙන පරිදි, පළමු ක්‍රම දෙක කාර්ය සාධනය අනුව සැසඳිය හැකි අතර, එය වෙනස් 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);
}

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1
ආරම්භක කේතයද වෙනසක් නොකරන බව පෙනේ: jsperf.com/capitalize-first-letter-of-string/2
user420667

6
ප්‍රතිස්ථාපනය .slice(1)කිරීමෙන් .substr(1)කාර්යසාධනය තව දුරටත් වැඩි වන බව සලකන්න .
Przemek

2
සාධාරණ සලකා බැලීම. බොහෝ අවස්ථාවන්හීදී කාර්ය සාධනය වැඩි වීම පවා සැලකිය නොහැකි බව සිතන්න: “මන්දගාමී” ප්‍රවේශය පවා එම්එස් 10 ක් තුළ නූල් 19k හැසිරවිය හැකිය. එබැවින් ඔබ සඳහා භාවිතා කිරීමට වඩාත් පහසු එකක් ගන්න.
උපුටා ගැනීම එඩී

1
යමෙකු කුතුහලයෙන් සිටී නම් (මා වැනි) පසුගිය සිව් වසර තුළ මෙහි ක්‍රියාකාරිත්වය ඉහළ ගොස් ඇති ආකාරය, 2018 මැක්බුක් ප්‍රෝ හි තුන්වන කාර්යයේ දෘෂ්ටි කෝණය 135,307,869 ක් වන අතර, එබැවින් මූලික වශයෙන් 12.4 ගුණයකින් වේගවත් වේ.
කාලෝ ෆීල්ඩ්

151

තවත් අවස්ථාවකට පළමු අකුර කැපිටල් කර ඉතිරි කොටස කුඩා කිරීමට මට එය අවශ්‍ය වේ. පහත දැක්වෙන අවස්ථා නිසා මෙම කාර්යය වෙනස් කිරීමට මට හැකි විය:

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

1
"... නමුත් වෙනත් අක්ෂරවල සිද්ධිය වෙනස් නොකරන්න". OP ඇසූ ප්‍රශ්නයට මෙය නිවැරදි පිළිතුරක් නොවේ.
කාලෝස් මුනෝස්

2
@ කාලෝස් මුනෝස් ඔබ ආරම්භක වාක්‍යය කියවන්නේ නම් ඔහු පවසන්නේ මෙය වෙනත් නඩුවක් සඳහා බවයි.
ටීඑම්එච්

3
Om ටොම්හාර්ට් හරියටම එය ප්‍රශ්නයට විසඳුමක් නොවන්නේ එබැවිනි. එය අදහස් දැක්වීමක් හෝ වෙනත් ප්‍රශ්නයක් හා පිළිතුරක් විය යුතුය
කාලෝස් මුනෝස්

15
මම ඒ පිළිබඳව ඔබ සමඟ එකඟ වෙමි, නමුත් මෙම පිළිතුරෙන් කුමක් කළ යුතු දැයි බැලීමට බොහෝ දෙනෙක් මෙහි සිටින බව මට පෙනේ.
ටීඑම්එච්

75

මෙය 2018 ECMAScript 6+ විසඳුමයි :

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


5
.slice()වඩා අඩු වේ .substring(), str[0]වනු ඇත undefinedහිස් අගයක් සඳහා මෙතන 8 අකුරු කොටස් දෙකක් හඳුන්වා එක්වන සැකිල්ල literals භාවිතා අතර, +3. පමණක් හඳුන්වා දෙනු ඇත
Przemek

4
මගේ පිළිතුරේ කාරණය වන්නේ Prz නව ES6 සහය දක්වන විශේෂාංග, විශේෂයෙන් වෙනත් පෝස්ට් වල සඳහන් නොවූ අච්චු වචනාර්ථයන් ප්‍රදර්ශනය කිරීමයි. StackOverflow හි අදහස වන්නේ සෙවුම්කරුට “විකල්ප” ලබා දීමයි. මෙම පිළිතුරේ විස්තර කර ඇති අච්චු සාහිත්‍ය සංකල්පය ඔවුන්ට ගත හැකි අතර, ඔවුන්ගේ යෙදුමට අමතර ඉතිරි කළ මිලි තත්පර අවශ්‍ය නම්, උපස්ථර v. පෙත්ත වැනි ක්ෂුද්‍ර වේග වැඩි දියුණු කිරීම් සමඟ එය ඒකාබද්ධ කළ හැකිය. මගේ පිළිතුරට කිසිදු ඒකක පරීක්ෂණයක් ඇතුළත් නොවේ, එයින් පෙන්නුම් කරන්නේ ඔබ කිසි විටෙකත් ස්ටැක් ඕවර්ෆ්ලෝ පිළිතුර කෙලින්ම පිටපත් නොකළ යුතු බවයි. මම හිතන්නේ සංවර්ධකයා මගේ පිළිතුර ගෙන එය අනුවර්තනය කරයි.
ස්ටර්ලින් බෝර්න්

මෙහි අච්චු වචන භාවිතා කිරීමෙන් ඔබට කිසිවක් නොලැබෙන අතර ${}හුදෙක් ශබ්දය එක් කරයි. const newStr = str[0].toUpperCase() + str.slice(1);කියවීමට පහසුය.
බොරිස්

1
කියවීමට පහසු දේ පිළිබඳව එකඟ නොවීමට එකඟ වන්න.
ස්ටර්ලින් බෝර්න්

67

ඔබ දැනටමත් භාවිතා කරන්නේ නම් (හෝ සලකා බලමින්) lodash, විසඳුම පහසුය:

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

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

_.capitalize('fred') //=> 'Fred'

ඔවුන්ගේ ලියකියවිලි බලන්න: 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'

පළමු ඉහළ නඩුව සඳහා වැනිලා ජේඑස්:

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

11
මම හිතන්නේ මනාපය වැනිලා ජේ සඳහා විය යුතු බැවින් බොහෝ අය සම්පූර්ණ රාමුවක් බාගත නොකරන්නේ නූලක් ප්‍රාග්ධනය කිරීමට පමණි.
GGG

7
මගේ සියලු ව්‍යාපෘති වල මම මෙතෙක් ලොඩාෂ් භාවිතා කර නැත. ගූගල් හි බොහෝ පුද්ගලයින් මෙම පිටුවෙන් අවසන් වන බව අමතක නොකරන්න, විකල්පයක් ලෙස රාමුවක් ලැයිස්තුගත කිරීම හොඳයි, නමුත් ප්‍රධාන පිළිතුරක් ලෙස නොවේ.
GGG

2
වෙනත් පිළිතුරු වැනිලා ජේඑස් භාවිතා කරන බැවින්, අප බොහෝ දෙනෙක් ලොඩාෂ් / අවධාරනය භාවිතා කරන බැවින් මෙවැනි පිළිතුරක් ලැබීම සතුටක්.
ලූ රෝමන්

1
ඔබේ ව්‍යාපෘතියට යැපීමක් ලෙස සමස්ත පුස්තකාලයක්ම ආනයනය කරන ජාවාස්ක්‍රිප්ට් පුස්තකාලයක් නොව, ජාවාස්ක්‍රිප්ට් හි එය කිරීමට OP දැන් ඉල්ලා සිටින පරිදි මෙය නිවැරදි පිළිතුර නොවේ. එය භාවිතා නොකරන්න.
dudewad

1
OP හි ප්‍රශ්නය මගේ පිළිතුර අවසානයේ වැනිලා වල ඇත.
chovy

62

සියලුම වචනවල පළමු අකුරක් ලොකු අකුරකින් කැපිටල් කරන්න:

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(" ");
}

14
නැවත කියවන ප්‍රශ්නය: මට අවශ්‍ය වන්නේ නූලක පළමු අක්‍ෂරය ලොකු අකුරක් කර ගැනීමටය, නමුත් වෙනත් අක්ෂරවල කාරණය වෙනස් නොකරන්න.
ජිමීපෙන

2
මම දන්නවා මම එහෙම කළා. මුළු නූලම ප්‍රාග්ධනීකරණය වීමට පටන් ගන්නේ නම් මම එක දෙයක් එකතු කරමි: කෑලි [i] = j + කෑලි [i] .substr (1) .ToLowerCase ();
මැලොවිච්

4
මෙම නඩුවට තවත් විසඳුමක්: capital capitalFirstLetters (s) {return s.split ("") .map (function (w) {return w.charAt (0) .toUpperCase () + w.substr (1)}) එක්වන්න. ("") A එය ශ්‍රිතයකට ඇතුළත් නොකළ හොත් එය හොඳ ලයිනර් එකක් විය හැකිය.
ලූක් චැනින්ග්ස්

මුලින් මුළු
නූලම

මෙම ශ්‍රිතය ප්‍රශ්නයට පිළිතුරු නොදීම හැරුණු විට එය ඇත්ත වශයෙන්ම සංකීර්ණ වී ඇත. s => s.split(' ').map(x => x[0].toUpperCase() + x.slice(1)).join(' ')
ඕවර් කෝඩර්

48

අපට පළමු චරිතය මගේ ප්‍රියතම එකක් සමඟ ලබා ගත හැකිය RegExp, එය හුරුබුහුටි සිනහවක් සේ පෙනේ:/^./

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

සහ සියලු කෝපි-ජුන්කි සඳහා:

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

... සහ දේශීය මූලාකෘති දිගු නොකර මෙය කිරීමට වඩා හොඳ ක්‍රමයක් ඇතැයි සිතන සියලුම පිරිමි ළමයින් සඳහා:

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

2
සංගීත මූලාකෘතිය වෙනස් නොකර මෙය කිරීමට වඩා හොඳ ක්‍රමයක් තිබේ.
බිග් මැක්ලාර්ජ්හියුජ්

2
sure davidkennedy85 ෂුවර්! නමුත් මෙය සරලම ක්‍රමය මිස හොඳම ක්‍රමය නොවේ ... ;-)
yckart

ආදරණීය ස්වාමීනි, මෙම ප්‍රශ්නයට පිළිතුරු මිලියනයක් ඇත! ඔබේ විසඳුම es6 හි ඊටත් වඩා හොඳයි. 'Answer'.replace(/^./, v => v.toLowerCase())
stwilz


45

ඔබ underscore.js හෝ Lo-Dash භාවිතා කරන්නේ නම් , undererscore.string පුස්තකාලය ප්‍රාග්ධනීකරණය ඇතුළුව නූල් දිගු සපයයි:

_.capitalize (string) නූලෙහි පළමු අකුර ලොකු අකුරට පරිවර්තනය කරයි.

උදාහරණයක්:

_.capitalize("foo bar") == "Foo bar"

3
3.0.0 අනුවාදයේ සිට, ලො-ඩෑෂ් පෙරනිමියෙන් මෙම නූල් ක්‍රමය ලබා ගත හැකිය. මෙම පිළිතුරෙහි විස්තර කර ඇති ආකාරයටම:_.capitalize("foo") === "Foo" .
bardzusny

එසේම ප්‍රයෝජනවත් underscore.js ශ්‍රිතයක් humanizeඇත. එය අවධාරනය නොකළ, ඔටුවන් කළ හෝ ඉරක් සහිත නූල් මානුෂීය එකක් බවට පරිවර්තනය කරයි. ආරම්භක හා අවසන් සුදු අවකාශය ඉවත් කරන අතර '_id' යන තැපැල් ස්ථරය ඉවත් කරයි.
ස්ටෙපාන් සකාරොව්

1
4 * අනුවාදයේ සිට, ලොඩාෂ් අනෙක් සෑම අකුරක්ම කුඩා අකුරින් ලියයි, ප්‍රවේශම් වන්න!
ඊගෝර් ලොස්කුටොව්

45
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
}

ඊළගට:

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

FUN සඳහා නොවැම්බර් 2016 (ES6) යාවත්කාලීන කරන්න:

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

එවිට capitalize("hello") // Hello


3
හේතු 2 ක් සඳහා මෙය දුර්වල විසඳුමක් යැයි මම සිතමි: ප්‍රාථමිකයක මූලාකෘතිය වෙනස් කිරීම නරක අදහසකි. පිරිවිතර වෙනස් වී ඔවුන් නව ප්‍රාග්ධන දේපල නාමයක් ලෙස 'ප්‍රාග්ධනීකරණය' තෝරා ගැනීමට තීරණය කරන්නේ නම්, ඔබ මූලික භාෂා ක්‍රියාකාරිත්වය බිඳ දමයි. එසේම, තෝරාගත් ක්‍රමයේ නම දුර්වල ය. බැලූ බැල්මට, මෙය සමස්ත නූලම ප‍්‍රාග්ධනය කරනු ඇතැයි මම සිතමි. PHP හි ucFirst හෝ ඊට සමාන යමක් වැනි වඩාත් විස්තරාත්මක නමක් භාවිතා කිරීම වඩා හොඳ අදහසක් විය හැකිය.
dudewad

අනෙක් ES6 පිළිතුර වඩාත් සරල ය : const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();.
ඩෑන් ඩස්කල්ස්කු

45

කෙටිම විසඳුම් 3, sනූල් ඇති විට 1 සහ 2 අවස්ථා හසුරුවන්න "", nullසහ undefined:

 s&&s[0].toUpperCase()+s.slice(1)        // 32 char

 s&&s.replace(/./,s[0].toUpperCase())    // 36 char - using regexp

'foo'.replace(/./,x=>x.toUpperCase())    // 31 char - direct on string, ES6


43

ප්‍රතිස්ථාපනය කිරීමෙන් එය ක්‍රියාත්මක කිරීමට ඉතා සරල ක්‍රමයක් තිබේ . ECMAScript 6 සඳහා:

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

ප්‍රති ult ලය:

'Foo'

1
මෙතෙක් හොඳම පිළිතුර, සහ රීජෙක්ස් ලැම්බඩා සින්ටැක්ස් පෙන්වීම සඳහා අමතර ලකුණු. මම විශේෂයෙන් මේකට කැමතියි එය ඕනෑම තැනක චතුර ලෙස කපන්න.
වේඩ් හැට්ලර්

භාවිතා /^[a-z]/iභාවිතා වඩා හොඳ වනු ඇත .වර්ණමාලා හැර වෙනත් චරිතය වෙනුවට උත්සාහ නැහැ පූර්ව එකක් ලෙස
සංග්රහයේ පිස්සෙක්

42

CSS පමණි

p::first-letter {
  text-transform: uppercase;
}
  • නමින් තිබියදීත් ::first-letter, එය පළමු අදාළ චරිතය එනම් string වූ අවස්ථාවක, %aමෙම තේරීම් සඳහා අදාල වනු ඇත %එම නිසා ඒවාa ප්රාග්ධනිත වන්නේ නැහැ.
  • IE9 + හෝ IE5.5 + හි එය එක් මහා බඩවැලක් ( :first-letter) සමඟ පමණක් උරුම අංකනය සඳහා සහය දක්වයි .

ES2015 එක් ලයිනර්

පිළිතුරු රාශියක් ඇති නමුත් ES2015 හි මුල් ගැටළුව කාර්යක්ෂමව විසඳිය හැකි කිසිවක් නොමැති බැවින් මම පහත සඳහන් කරුණු ඉදිරිපත් කළෙමි.

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

සටහන්

  • parameters => functionඊතල ශ්‍රිතය ලෙස හැඳින්වේ .
  • මම ගියේ නම capitalizeFirstCharවෙනුවටcapitalizeFirstLetter , මන්දයත් OP විසින් සම්පූර්ණ නූලෙහි පළමු අකුර කැපිටල් කේතයක් ඉල්ලා නොසිටි නමුත් පළමු වර්‍ගය (එය අකුර නම්, ඇත්ත වශයෙන්ම).
  • const ප්‍රකාශ කිරීමේ හැකියාව අපට ලබා දෙයි capitalizeFirstCharනියතයක් ලෙස , ක්‍රමලේඛකයෙකු ලෙස ඔබ සැමවිටම ඔබේ අභිප්‍රායයන් පැහැදිලිව ප්‍රකාශ කළ යුතුය.
  • මා විසින් සිදු කරන ලද මිණුම් ලකුණෙහි string.charAt(0)සහ අතර සැලකිය යුතු වෙනසක් නොමැත string[0]. සටහන කෙසේ වෙතත්, එම string[0]වනු ඇත undefinedහිස් අගයක් සඳහා, එම නිසා එය කිරීමට නැවත ලිව යුතුstring && string[0] , විකල්ප සාපේක්ෂව ද විස්ථරාත්මක මගක් වන.
  • string.substring(1)වඩා වේගවත් string.slice(1).

මිණුම් ලකුණ

  • මෙම විසඳුම සඳහා 4,956,962 ops / s ± 3.03%,
  • 4,577,946 ops / s ± 1.2% වැඩිපුරම ඡන්දය දුන් පිළිතුර සඳහා.
  • ගූගල් ක්‍රෝම් 57 හි JSBench.me සමඟ නිර්මාණය කරන ලදි .

විසඳුම් සංසන්දනය


Green හරිත: එය එසේ වන්නේ , ඔබ කොලොන් දෙකක් සහිත තේරීම් කාරකය නියම කළ බව ඔබට විශ්වාසද?
Przemek

1
ඔබට ඇත්ත වශයෙන්ම ප්ලස් ලකුණ (+) ES6 හි සංයුක්ත ක්‍රමයක් ලෙස භාවිතා කිරීමට අවශ්‍ය නැත. ඔබට අච්චු වචන භාවිතා කිරීමට අවශ්‍ය වනු ඇත: eslint.org/docs/rules/prefer-template
ස්ටර්ලින් බෝර්න්

42

තාරකා තල කේත ලක්ෂ්‍යවලට අදාළ ගැටළු වල දැනට පවතින පිළිතුරු වල කිසිදු සඳහනක් මා දුටුවේ නැත ජාත්‍යන්තරකරණය . ලබා දී ඇති ස්ක්‍රිප්ට් එකක් භාවිතා කරමින් “ලොකු අකුරු” යනු සෑම භාෂාවකම එකම දේ නොවේ.

තාරකා තල කේත ලක්ෂ්‍ය හා සම්බන්ධ ගැටළු වලට මුලදී මම පිළිතුරු දුටුවේ නැත. එහි එක් (මෙම එක් වනු ඇත වැනි මම හිතන්නේ!), නමුත්, එය ටිකක් තැන්පත් වෙනවා


යෝජිත කාර්යයන් බොහොමයක් මේ ආකාරයෙන් පෙනේ:

function capitalizeFirstLetter(str) {
  return str[0].toUpperCase() + str.slice(1);
}

කෙසේ වෙතත්, සමහර අක්ෂර අක්ෂර BMP වලින් පිටත වැටේ (මූලික බහුභාෂා තලය, කේත ලකුණු U + 0 සිට U + FFFF දක්වා). උදාහරණයක් ලෙස මෙම Deseret පා take ය ගන්න:

capitalizeFirstLetter("𐐶𐐲𐑌𐐼𐐲𐑉"); // "𐐶𐐲𐑌𐐼𐐲𐑉"

මෙහි පළමු අක්‍ෂරය ප්‍රාග්ධනීකරණය කිරීමට අසමත් වන්නේ නූල් වල අරාව-සුචිගත කරන ලද ගුණාංග “අක්ෂර” හෝ කේත ලක්ෂ්‍යවලට ප්‍රවේශ නොවන බැවිනි. ඔවුන් UTF-16 කේත ඒකක වලට ප්‍රවේශ වේ. පෙති කපන විටද මෙය සත්‍ය වේ - දර්ශක අගයන් කේත ඒකක වෙත යොමු වේ.

එය සිදුවන්නේ යූටීඑෆ් -16 කේත ඒකක 1: 1 ක් වන අතර යූඑස්වී කේත ලක්ෂ්‍ය පරාස දෙකක් තුළ ය, යූ + 0 සිට යූ + ඩී 7 එෆ්එෆ් සහ යූ + ඊ 1000 සිට යූ + එෆ්එෆ්එෆ්එෆ් ඇතුළත් වේ. බොහෝ අක්ෂර අක්ෂර එම පරාස දෙකට වැටේ, නමුත් ඒවා සියල්ලම නොවේ.

ES2015 සිට මේ සමඟ කටයුතු කිරීම ටිකක් පහසු විය. String.prototype[@@iterator]කේත ලකුණු වලට අනුරූප නූල් ලබා දෙයි **. උදාහරණයක් ලෙස, අපට මෙය කළ හැකිය:

function capitalizeFirstLetter([ first, ...rest ]) {
  return [ first.toUpperCase(), ...rest ].join('');
}

capitalizeFirstLetter("𐐶𐐲𐑌𐐼𐐲𐑉") // "𐐎𐐲𐑌𐐼𐐲𐑉"

දිගු නූල් සඳහා, මෙය බොහෝ විට කාර්යක්ෂම නොවේ *** - ඉතිරි කොටස නැවත කියවීමට අපට අවශ්‍ය නැත. අපට භාවිතා කළ හැකියString.prototype.codePointAtඑම පළමු (හැකි) ලිපිය ලබා ගැනීමට කළ හැකිය, නමුත් පෙත්ත ආරම්භ විය යුත්තේ කොතැනින්ද යන්න අපට තවමත් තීරණය කළ යුතුය. ඉතිරිය නැවත නොකිරීමට එක් ක්‍රමයක් නම් පළමු කේත ලක්ෂ්‍යය BMP වලින් පිටත දැයි පරීක්ෂා කිරීමයි; එය එසේ නොවේ නම්, පෙත්ත 1 න් ආරම්භ වන අතර, එසේ නම්, පෙත්ත 2 න් ආරම්භ වේ.

function capitalizeFirstLetter(str) {
  const firstCP = str.codePointAt(0);
  const index = firstCP > 0xFFFF ? 2 : 1;

  return String.fromCodePoint(firstCP).toUpperCase() + str.slice(index);
}

capitalizeFirstLetter("𐐶𐐲𐑌𐐼𐐲𐑉") // "𐐎𐐲𐑌𐐼𐐲𐑉"

ඔබට > 0xFFFFඑහි වෙනුවට බිට්වයිස් ගණිතය භාවිතා කළ හැකිය , නමුත් බොහෝ විට මේ ආකාරයෙන් තේරුම් ගැනීම පහසු වන අතර එක්කෝ එකම දේ සාක්ෂාත් කර ගනු ඇත.

අවශ්‍ය නම් එම තර්කය තව ටිකක් ඉදිරියට ගෙන යාමෙන් අපට ES5 සහ ඊට පහළින් මෙම කාර්යය කළ හැකිය. කේත ලක්ෂ්‍ය සමඟ වැඩ කිරීම සඳහා ES5 හි සහජ ක්‍රම නොමැත, එබැවින් පළමු කේත ඒකකය අන්‍යාගමිකද යන්න අප විසින් අතින් පරීක්ෂා කළ යුතුය ****:

function capitalizeFirstLetter(str) {
  var firstCodeUnit = str[0];

  if (firstCodeUnit < '\uD800' || firstCodeUnit > '\uDFFF') {
    return str[0].toUpperCase() + str.slice(1);
  }

  return str.slice(0, 2).toUpperCase() + str.slice(2);
}

capitalizeFirstLetter("𐐶𐐲𐑌𐐼𐐲𐑉") // "𐐎𐐲𐑌𐐼𐐲𐑉"

ආරම්භයේ දී මම ජාත්‍යන්තරකරණ සලකා බැලීම් ද සඳහන් කළෙමි. මේවායින් සමහරක් ගණනය කිරීම ඉතා අපහසු වන්නේ ඔවුන්ට දැනුම පමණක් අවශ්‍ය නොවන බැවිනි කුමක් ගැන භාෂාව භාවිතා කොට ඇත, පමණක් නොව, භාෂාව යන වචන නිශ්චිත දැනුම අවශ්ය විය හැක. උදාහරණයක් ලෙස, අයර්ලන්ත ඩිග්‍රැෆ් "mb" වචනයේ ආරම්භයේදීම "mB" ලෙස ප්‍රාග්ධනීකරණය කරයි. තවත් උදාහරණයක්, ජර්මානු එසෙට්, කිසි විටෙක වචනයක් (අෆයික්) ආරම්භ නොකරයි, නමුත් ගැටලුව නිරූපණය කිරීමට තවමත් උපකාරී වේ. සිම්පල් එසෙට් (“ß”) “එස්එස්” ලෙස ප්‍රාග්ධනීකරණය කරයි, නමුත් “එස්එස්” ට “ß” හෝ “එස්එස්” ලෙස කුඩා කළ හැකිය - නිවැරදි දේ දැන ගැනීමට ඔබට ජර්මානු භාෂාව පිළිබඳ බාහිර දැනුමක් අවශ්‍ය වේ!

මේ ආකාරයේ ගැටළු වලට වඩාත්ම ප්‍රසිද්ධ උදාහරණය බොහෝ විට තුර්කි ය. තුර්කි ලතින් භාෂාවෙන්, i හි ප්‍රාග්ධන ස්වරූපය is වන අතර, මගේ කුඩා අකුර is වේ - ඒවා වෙනස් අක්ෂර දෙකකි. වාසනාවකට අපට මේ සඳහා ගණන් දිය හැකි ක්‍රමයක් තිබේ:

function capitalizeFirstLetter([ first, ...rest ], locale) {
  return [ first.toLocaleUpperCase(locale), ...rest ].join('');
}

capitalizeFirstLetter("italy", "en") // "Italy"
capitalizeFirstLetter("italya", "tr") // "İtalya"

බ්‍රව්සරයක, පරිශීලකයාගේ වඩාත්ම කැමති භාෂා ටැගය මඟින් දක්වනු ලැබේ navigator.language, මනාප අනුපිළිවෙලින් ලැයිස්තුවක් සොයාගත හැකි අතර navigator.languages, ලබා දී ඇති DOM මූලද්‍රව්‍යයේ භාෂාව Object(element.closest('[lang]')).lang || YOUR_DEFAULT_HEREබහු භාෂා ලේඛන සමඟ (සාමාන්‍යයෙන්) ලබා ගත හැකිය .

ES2018 හි හඳුන්වා දුන් RegExp හි යුනිකෝඩ් දේපල චරිත පංති සඳහා සහය දක්වන නියෝජිතයින් තුළ, අප උනන්දු වන චරිත මොනවාදැයි කෙලින්ම ප්‍රකාශ කිරීමෙන් අපට තවදුරටත් දේවල් පිරිසිදු කළ හැකිය:

function capitalizeFirstLetter(str, locale=navigator.language) {
  return str.replace(/^\p{CWU}/u, char => char.toLocaleUpperCase(locale));
}

තරමක් හොඳ නිරවද්‍යතාවයකින් යුත් වචන කිහිපයක වචන විශාලනය කිරීම සඳහා මෙය ටිකක් වෙනස් කළ හැකිය. මෙම CWUහෝ Changes_When_Uppercased චරිතය දේපල uppercased විට, හොඳින්, වෙනස් සියලු කේතය ලකුණු තරග. අපි ලන්දේසි වැනි titlecased digraph චරිත සමග මෙය සිදු කළ හැකි ij , උදාහරණයක් ලෙස:

capitalizeFirstLetter('ijsselmeer'); // "IJsselmeer"

ලියන අවස්ථාව වන විට (2020 පෙබරවාරි), ෆයර්ෆොක්ස් / ස්පයිඩර්මන්කි විසින් පසුගිය දෙවසර තුළ හඳුන්වා දුන් රෙජීඑක්ස් විශේෂාංග කිසිවක් තවමත් ක්‍රියාත්මක කර නොමැත *****. ඔබට මෙම අංගයේ වත්මන් තත්වය කැන්ගක්ස් සංයුක්ත වගුවෙන් පරීක්ෂා කළ හැකිය . රෙජෙක්ස් වචනාර්ථයෙන් තොරව සමාන රටාවන්ට දේපල යොමු කිරීම් සමඟ සම්පාදනය කිරීමට බාබෙල්ට හැකි නමුත් එහි ප්‍රති code ලය වන කේතය අති විශාල විය හැකි බව මතක තබා ගන්න.


බොහෝ දුරට, මෙම ප්‍රශ්නය අසන පුද්ගලයින් ඩෙසරෙට් ප්‍රාග්ධනීකරණය හෝ ජාත්‍යන්තරකරණය ගැන සැලකිලිමත් නොවනු ඇත. නමුත් මෙම ගැටළු පිළිබඳව දැනුවත්ව සිටීම හොඳය, මන්දයත් වර්තමානයේදී ඒවා ගැන සැලකිලිමත් නොවුනත් අවසානයේදී ඔබට ඒවා හමුවීමට හොඳ අවස්ථාවක් තිබේ. ඒවා “එජ්” නඩු නොවේ, නැතහොත් ඒවා අර්ථ දැක්වීමේ අද්දර අවස්ථා නොවේ - බොහෝ අය තුර්කි භාෂාව කථා කරන මුළු රටක්ම ඇත, කෙසේ වෙතත්, කේත ඒකක සමඟ කේත ඒකක ගැටීම තරමක් පොදු දෝෂ ප්‍රභවයකි (විශේෂයෙන් ඉමොජි සම්බන්ධයෙන්). නූල් සහ භාෂාව යන දෙකම සෑහෙන්න සංකීර්ණයි!


* UTF-16 / UCS2 හි කේත ඒකක ද යුනිකෝඩ් කේත ලක්ෂ්‍ය වේ. උදා: U + D800 තාක්‍ෂණිකව කේත ලක්ෂ්‍යයකි, නමුත් එය මෙහි “තේරුම” නොවේ ... වර්ග කිරීම ... එය ලස්සන වුව ද නොපැහැදිලි. අන්‍යාගමිකයින් අනිවාර්යයෙන්ම USVs නොවේ (යුනිකෝඩ් පරිමාණ අගයන්).

** අන්‍යාදේශ කේත ඒකකයක් “අනාථ” නම් - එනම්, තාර්කික යුගලයක කොටසක් නොවේ - ඔබට තවමත් මෙහි අන්‍යාගමිකයින් ලබා ගත හැකිය.

*** සමහරවිට. මම එය අත්හදා බැලුවේ නැත. ප්‍රාග්ධනීකරණය අර්ථවත් බාධකයක් බව ඔබ තීරණය කර නොමැති නම්, මම එය දහඩිය දමන්නේ නැත - වඩාත්ම පැහැදිලි හා කියවිය හැකි යැයි ඔබ විශ්වාස කරන ඕනෑම දෙයක් තෝරන්න.

**** එවැනි ශ්‍රිතයක් පළමු ඒකකය වෙනුවට පළමු හා දෙවන කේත ඒකක දෙකම පරීක්ෂා කිරීමට කැමති විය හැකිය, මන්ද පළමු ඒකකය අනාථ අන්‍යාගමිකයෙකු විය හැකි බැවිනි. උදාහරණයක් ලෙස "D uD800x" ආදානය X ප්‍රාග්ධනීකරණය කරයි, එය අපේක්ෂා කළ හැකි හෝ නොවිය හැකිය.

***** ප්‍රගතිය වඩාත් .ජුව අනුගමනය කිරීමට ඔබට අවශ්‍ය නම් මෙන්න බග්සිලා ප්‍රශ්නය .


2
මෙම පිළිතුර ඉදිරිපස දෙසට ගෙන යා යුතුය.
රෙනාර් බර්ග්

ස්තූතියි @ රෙනාර්බර්ග් - ඔබේ ප්‍රකාශය මට මේ ගැන මතක් කර දුන් හෙයින්, මම එය නැවත කියවා බැලුවෙමි. සමහර පාරිභාෂිතය වඩා හොඳින් පැහැදිලි කිරීමට උත්සාහ දරා ඇත.
අර්ධ සළකුණ

නියම පිළිතුර .....
බෙන් ඇස්ටන්

මෙම පිළිතුර විශිෂ්ටයි, මම තව දුරටත් එය නගා සිටුවීමට කැමැත්තෙමි.
ඩේවිඩ් බාර්කර්

38

CSS හි එය පහසු බව පෙනේ:

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

මෙය CSS පෙළ-පරිණාමන දේපලෙන් ( W3Schools හි ) ය.


29
Im සිමොන් HTML ලේඛනයක කොටසක් ලෙස නූල අනිවාර්යයෙන්ම ප්‍රතිදානය වනු ඇති බව ප්‍රකාශ කර නැත - CSS භාවිතයට යන්නේ එය නම් පමණි.
ඇඩම් හෙප්ටන්

9
ඇඩම්, ඇත්ත, නමුත් මම අනුමාන කරන්නේ ජාවාස්ක්‍රිප්ට් වලින් 95% කට වඩා වැඩි ප්‍රමාණයක් HTML සහ CSS සමඟ භාවිතා කර ඇති බවයි. අවාසනාවකට මෙන්, "ප්‍රාග්ධනීකරණය" ප්‍රකාශය ඇත්ත වශයෙන්ම සෑම වචනයක්ම ප්‍රාග්ධනීකරණය කරයි , එබැවින් ඔබට තවමත් JS අවශ්‍ය වන්නේ නූල්වල පළමු අකුර පමණි.
සයිමන් ඊස්ට්

18
වැරදියි, දිනේෂ්. ඔහු පැවසුවේ නූල් වල පළමු චරිතයයි .
සයිමන් ඊස්ට්

81
හාස්‍යජනක උඩු යටිකුරු සංඛ්‍යාවක් තිබියදීත්, මෙම පිළිතුර වැරදියි, මන්ද එය සෑම වචනයකම පළමු අකුර විශාල කර ගනී . Yan රයන්, ඔබ එය මකා දැමුවහොත් විනය බැජ් එකක් උපයා ගනී . කරුණාකර එසේ කරන්න.
ඩෑන් ඩස්කල්ස්කු

10
AnDanDascalescu සමඟ එකඟ වන්න - රයන් ගේ පිළිතුර සම්පූර්ණයෙන්ම වැරදිය.
ටිමෝ


37

පළමුවෙන්ම CSS භාවිතා කරමින් මෙවැනි දේ හැසිරවීම වඩා හොඳය , පොදුවේ, ඔබට CSS භාවිතා කර යමක් විසඳිය හැකි නම්, පළමුව ඒ සඳහා යන්න, ඉන්පසු ඔබේ ගැටළු විසඳීමට JavaScript උත්සාහ කරන්න, එබැවින් මෙම අවස්ථාවේදී :first-letterCSS භාවිතා කර උත්සාහ කරන්නtext-transform:capitalize;

එබැවින් ඒ සඳහා පංතියක් නිර්මාණය කිරීමට උත්සාහ කරන්න, එවිට ඔබට එය ගෝලීයව භාවිතා කළ හැකිය, උදාහරණයක් ලෙස: .first-letter-uppercaseසහ ඔබේ CSS හි පහත වැනි දෙයක් එක් කරන්න:

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

විකල්ප විකල්පය වන්නේ ජාවාස්ක්‍රිප්ට් ය, එබැවින් හොඳම දේ මේ වගේ දෙයක් වනු ඇත:

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

එය මෙසේ අමතන්න:

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'

ඔබට එය නැවත නැවත භාවිතා කිරීමට අවශ්‍ය නම්, එය ජාවාස්ක්‍රිප්ට් ස්වදේශීය සංගීතයට අනුයුක්ත කිරීම වඩා හොඳය, එබැවින් පහත වැනි දෙයක්:

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

එය පහත පරිදි අමතන්න:

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

36

ඔබට සියලු කැප්ස් පෙළ නැවත ආකෘතිකරණය කිරීමට අවශ්‍ය නම්, ඔබට වෙනත් උදාහරණ වෙනස් කිරීමට අවශ්‍ය වනු ඇත:

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

පහත පා text ය වෙනස් කර ඇති බව මෙය සහතික කරයි:

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

බොහෝ විට මෙය අක්ෂර වින්‍යාසය වැනි කුඩා අකුරු බවට පරිවර්තනය කරනු ඇති බව සඳහන් කිරීම වටී, එබැවින් බොහෝ විට හොඳම අදහස නොවේ
මොනොක්‍රොම්

එසේම, GAMITG සැබවින්ම සංස්කරණයක් කළේ තනතුරේ කේත නොවන කොටසකින් හිස් අවකාශයක් ඉවත් කිරීමටද? O_O
මොනොක්‍රොම්

btw, මෙය ඉහළ අක්ෂර අක්ෂර බිඳ දමනු ඇත, එබැවින් ප්‍රවේශම් වන්න <3
මොනොක්‍රොම්

35

මෙන්න ucfirst () නමින් හැඳින්වෙන ශ්‍රිතයක් ( "ඉහළ අකුරු පළමු අකුර" සඳහා කෙටි):

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

Ucfirst ("සමහර නූල්") ඇමතීමෙන් ඔබට නූලක් විශාල කර ගත හැකිය - උදාහරණයක් ලෙස

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

එය ක්‍රියා කරන්නේ නූල් කැබලි දෙකකට බෙදීමෙනි. පළමු පෙළ මත ඉවත් වෙයි firstLetter පසුව දෙවන පෙළ මත පවුරක් firstLetter ඇමතීම මගින් firstLetter.toUpperCase () හා ඉල්ලා විසින් සොයා වන නූල්, ඉතිරි සමග එය එක්වෙයි str.substr (1) .

මෙය හිස් නූලක් සඳහා අසමත් වනු ඇතැයි ඔබ සිතනු ඇත, ඇත්ත වශයෙන්ම සී වැනි භාෂාවකින් ඔබට මෙය සපුරාලිය යුතුය. කෙසේ වෙතත්, ජාවාස්ක්‍රිප්ට් හි, ඔබ හිස් නූලක උපස්ථරයක් ගත් විට, ඔබට හිස් නූලක් ආපසු ලැබෙනු ඇත.


4
String.substring () හෝ String.slice () භාවිතා කරන්න ... උපස්ථරය () භාවිතා නොකරන්න - එය අතහැර දමා ඇත.
ජේම්ස්

7
99 999: එය substr()අතහැර දැමූ බව පවසන්නේ කොහෙන්ද ? එය වසර තුනකට පසුව වුවද, 2009 දී ඔබ මෙම ප්‍රකාශය කරන විට එය නැවත ලබා දෙන්න.
ඩෑන් ඩස්කල්ස්කු

substr()ඕනෑම ජනප්‍රිය ECMAScript ක්‍රියාවට නැංවීමකින් ඉවත් කළ බවක් සලකුණු නොකරනු ඇත (එය ඕනෑම වේලාවක අතුරුදහන් නොවනු ඇතැයි මට සැකයි), නමුත් එය ECMAScript පිරිවිතරයේ කොටසක් නොවේ. 3 වන සංස්කරණයේ එය සම්මත නොවන ඇමුණුමේ සඳහන් කර ඇත්තේ “ගුණාංග හෝ ඒවායේ අර්ථ නිරූපණයන් මෙම ප්‍රමිතියේ කොටසක් බවට පත් නොකර එවැනි ගුණාංග සඳහා ඒකාකාරී අර්ථකථන යෝජනා කිරීම” සඳහා ය.
පීටර් රස්ට්

2
එකම දෙයක් කරන්න බව ක්රම 3 සහිත ( substring, substrසහ slice) එක් රටකින්, බොහෝ වේ. මම සෑම විටම භාවිතා sliceකරන්නේ එය negative ණාත්මක දර්ශක සඳහා සහය දක්වන නිසා, එයට ව්‍යාකූල ආගන් මාරු කිරීමේ හැසිරීමක් නොමැති අතර එහි API sliceවෙනත් භාෂාවලට සමාන වේ .
පීටර් රස්ට්

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

සිදු විය am රාම්. උදාහරණ ද ඇතුළත් ය.
ෆෙඩ්රික් ඒ.

මෙය 2009 පිළිතුරට වඩා හොඳ වන්නේ කෙසේද ?.
ඩෑන් ඩස්කලෙස්කු

1
එය anDanDascalescu නොවේ. මම හිතන්නේ ඔබට තර්ක කළ හැකිය substr/ substringඊට වඩා ටිකක් අර්ථාන්විත ය slice, නමුත් එය මනාපයක් පමණි. කෙසේ වෙතත්, ප්‍රශ්නයේ දක්වා ඇති නූල් සමඟ උදාහරණ ඇතුළත් කළෙමි, එය '09 උදාහරණයේ නොමැති හොඳ ස්පර්ශයකි. මම අවංකවම සිතන්නේ එය ස්ටැක් ඕවර්ෆ්ලෝ හි කර්මය අවශ්‍ය වයස අවුරුදු 15 දක්වා අඩු වන බවයි;)
ෆ්‍රෙඩ්රික් ඒ.

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

භාවිතය:

capitalizedString = someString.capitalize();

මෙය පෙළ නූලකි => මෙය පෙළ නූලකි


20
නිතිපතා ප්‍රකාශන මේ සඳහා අධික ලෙස මරා දමනු ලැබේ.
ඇන්තනි සොටිල්

+1, මෙයයි මම ඇත්තටම සොයමින් සිටියේ. සුළු දෝෂයක් ඇතත් එය එසේ විය යුතුය return.this.toLocaleLowerCase().replace(...
tomdemuyt

+1, මම මෙම පිටුව phps ucfirst හි ජාවාස්ක්‍රිප්ට් අනුවාදයක් සොයමින් සිටියෙමි, බොහෝ දෙනා එය සොයා ගන්නේ කෙසේදැයි මම සැක කරමි.
බෙනුබර්ඩ්

AnDanDascalescu මට මෙය ප්‍රයෝජනවත් විය, එබැවින් +1 උපයෝගීතාව සහ -1 ගුද-රඳවා ගැනීමේ හැකියාව. ඔහු උදාහරණයක් ඇතුළත් කළ නිසා එහි ක්‍රියාකාරිත්වය පැහැදිලිය.
ට්‍රැවිස් වෙබ්

String.prototype.capitalize = function(){ return this.replace( /(^|\s)[a-z]/g , function(m){ return m.toUpperCase(); }); }; මම ඔබේ කේතය ටිකක් ප්‍රතිනිර්මාණය කරමි, ඔබට අවශ්‍ය වන්නේ පළමු තරගය පමණි.
IGRACH


21

මෙම විසඳුම පරීක්ෂා කරන්න:

var stringVal = 'master';
stringVal.replace(/^./, stringVal[0].toUpperCase()); // returns Master 

3
මෙය පිළිගත් පිළිතුර විය යුතුය. ප්‍රධාන විසඳුම අවධාරනය වැනි රාමුවක් භාවිතා නොකළ යුතුය.
ඇඩම් මැක්ආතර්

3
යතුරු එබීම් කිහිපයක් සුරකින්න;)stringVal.replace(/^./, stringVal[0].toUpperCase());
ඇල්ෆ්‍රෙඩෝ ඩෙල්ගාඩෝ

1
අවශ්‍ය නොවන අවස්ථාවලදී Regex භාවිතා නොකළ යුතුය. එය බෙහෙවින් අකාර්යක්ෂම වන අතර එය කේත තවදුරටත් සංක්ෂිප්ත නොකරයි. එපමනක් නොව, stringVal[0]වනු ඇත undefinedහිස් සඳහා stringVal, සහ ප්රවේශ දේපල එවැනි උත්සාහයක් ලෙස .toUpperCase()දෝෂයක් විසි ඇත.
Przemek

20
yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });

.


5
මෙයට තරමක් ඡන්ද ප්‍රමාණයක් තිබුණද, මෙහි පළ කර ඇති මන්දගාමී විසඳුම මෙයයි. මෙම පෝස්ට් එකෙන් වඩාත් ජනප්‍රිය පිළිතුරු සමඟ මම ටිකක් වේගවත් එකක් මෙහි තබා ඇත: forwebonly.com/…
රොබින් වැන් බැලන්

ObRobinvanBaalen ඔබේ සබැඳිය දැන් කැඩී ඇත. යාවත්කාලීන කළ එකක් තිබේද?
බ්‍රැඩ්

1
Regexp මේ සඳහා අධික ලෙස මරා දමා ඇත, වඩා සරල දේට කැමති වන්න: str.charAt (0) .toUpperCase () + str.slice (1)
සයිමන්

Rad බ්‍රැඩ් අවාසනාවට නොවේ
රොබින් වැන් බැලන්

බොහෝ විට, ඔබට රීජෙක්ස් සමඟ ඔබේ ගැටළුව විසඳීමට අවශ්ය නම්, ඔබ ගැටළු දෙකකින් අවසන් වේ.
Przemek

19

මෙම ucfirstකාර්යය වැඩ ඔයාට මේ වගේ ඒක කරන්න නම්.

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

ස්තූතියි ජේ.පී.


2
උත්සවයට හොඳ නමක්! එහි නම PHP හා සමාන වේ. ඇත්ත වශයෙන්ම ජේඑස් හි ලියා ඇති PHP කාර්යයන් පිළිබඳ සම්පූර්ණ පුස්තකාලයක් ඇත; එය PHP.js ලෙස හැඳින්වෙන අතර එය http://phpjs.org
Hussam

11
එක් ලයිනර්:string[0].toUpperCase() + string.substring(1)
dr.dimitru

ArTarranJones මෙහි වෙඩි නොවදින එක් ලයිනර් ය:(string[0] || '').toUpperCase() + string.substring(1)
dr.dimitru

@ dr.dimitru: මෝඩකම වෙනුවට (string[0] || '')ඔබට කළ හැකිය string.charAt(0).
Przemek


18
yourString.replace(/\w/, c => c.toUpperCase())

මෙම ඊතල ක්‍රියාකාරිත්වය පහසුම බව මට පෙනී ගියේය. ප්‍රතිස්ථාපනය\w ඔබගේ නූලෙහි පළමු අක්‍ෂරයට ( ) ගැලපෙන අතර එය ලොකු අකුරක් බවට පරිවර්තනය කරයි. රසික රසිකාවියන් අවශ්‍ය නොවේ.


1
මෙය පිළිගත් පිළිතුර විය යුතුය, ඒ වෙනුවට SO යල් පැන ගිය ප්‍රශ්න ප්‍රදානය කිරීමෙන් පසු අවසාන අවස්ථාව මෙය වේ. Btw, /./හේතු දෙකක් නිසා එය භාවිතා කිරීම වඩා හොඳය : /\w/පෙර අකුරු නොවන අක්ෂර සියල්ලම මඟ හරිනු ඇත (එබැවින් @@ abc @@ Abc බවට පත්වනු ඇත), පසුව එය ලතින් නොවන අක්ෂර සමඟ ක්‍රියා නොකරයි
ක්‍රිස්ටියන් ට්‍රේනා
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.