मैं जावास्क्रिप्ट में एक स्ट्रिंग अपरकेस का पहला अक्षर कैसे बनाऊं?


3757

मैं एक स्ट्रिंग अपरकेस का पहला अक्षर कैसे बनाऊं, लेकिन किसी भी अन्य अक्षर के मामले को नहीं बदलूं?

उदाहरण के लिए:

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

12
अंडरस्कोर में एक अंडरस्कोर है। जिसे अंडरस्कोर कहा जाता है। जिसमें यह और अन्य बेहतरीन टूल का एक गुच्छा शामिल है।
हारून

किस बारे में:return str.replace(/(\b\w)/gi,function(m){return m.toUpperCase();});
मुहम्मद उमेर

110
सरल:string[0].toUpperCase() + string.substring(1)
dr.dimitru

6
`${s[0].toUpperCase()}${s.slice(1)}`
नोएगो

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

जवाबों:


5804

मूल समाधान है:

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!)

और भी अधिक अंतर्राष्ट्रीयकरण विकल्पों के लिए, कृपया नीचे मूल उत्तर देखें


9
सबस्ट्रिंग को सामग्री से अधिक ब्राउज़रों में समझा जाता है
mplungjan

6
karim79 में जोड़ने के लिए - इसकी शायद यह एक फ़ंक्शन बनाने के लिए ओवरकिल है क्योंकि जावास्क्रिप्ट फ़ंक्शन रैपिंग के बिना चर के लिए एक ही काम करेगा। मुझे लगता है कि यह एक फ़ंक्शन का उपयोग करके अधिक स्पष्ट होगा, लेकिन इसके मूल अन्यथा, क्यों इसे एक फ़ंक्शन आवरण के साथ जटिल किया गया है?
रॉस

18
क्या हमें स्लाइस (1) को भी नहीं छोड़ना चाहिए?
hasen

177
नहीं, क्योंकि ओपी ने यह उदाहरण दिया है the Eiffel Tower -> The Eiffel Tower:। साथ ही, फ़ंक्शन को capitaliseFirstLetterनहीं कहा जाता है capitaliseFirstLetterAndLowerCaseAllTheOthers
प्रतिबंध-जियोइंजीनियरिंग

22
किसी को भी OOP के महत्वपूर्ण नियम की परवाह नहीं है? - कभी भी उन वस्तुओं को संपादित न करें जो आपके पास नहीं हैं । BTW, यह एक-लाइनर बहुत अधिक सुरुचिपूर्ण दिखता है:string[0].toUpperCase() + string.substring(1)
dr.dimitru

1349

यहाँ एक अधिक वस्तु-उन्मुख दृष्टिकोण है:

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

164
इस पोस्ट-प्रोटोटाइप.जेएस दुनिया में, देशी वस्तुओं को बदलने या विस्तारित करने का सुझाव नहीं दिया गया है।
रयान

191
@rxgx - "विस्तार मत करो" बूगीमैन अब बंद हो रहा है (भगवान का शुक्र है), और लोग अपने सिर को जैंड से बाहर निकाल रहे हैं और यह महसूस कर रहे हैं कि यह सिर्फ एक भाषा की विशेषता है। सिर्फ इसलिए कि Prototyp.js ने थोड़े समय के लिए ही वस्तु का विस्तार किया, इसका मतलब यह नहीं है कि मूल निवासी का विस्तार बुरा है। यदि आप किसी अज्ञात उपभोक्ता के लिए कोड लिख रहे हैं (जैसे कि एक यादृच्छिक स्क्रिप्ट जो यादृच्छिक साइटों पर जाती है), तो आपको ऐसा नहीं करना चाहिए, लेकिन इसके अलावा यह ठीक है।
csuwldcat

43
@csuwldcat यदि आप उपयोग कर रहे हैं तो एक अन्य पुस्तकालय जो आपको पता चले बिना अपने स्वयं के पूंजीकरण को जोड़ता है? चाहे प्रोटोटाइप हो या न हो पर प्रोटोटाइप का विस्तार करना बुरा रूप है। ईएस 6 के साथ, आंतरिक आपको अपने केक को खाने और इसे भी खाने की अनुमति देगा। मुझे लगता है कि आप ECMASCRIPT कल्पना का अनुपालन करने वाले शिम बनाने वाले लोगों के लिए "बूगीमैन" को भ्रमित कर सकते हैं। ये शिम पूरी तरह से ठीक हैं क्योंकि एक अन्य पुस्तकालय जो एक शिम जोड़ा गया था, उसी तरह इसे लागू करेगा। हालांकि, अपने स्वयं के गैर-ऐनक आंतरिक को जोड़ने से बचा जाना चाहिए।
जस्टिन मेयेर

43
मूल निवासी का विस्तार बुरा अभ्यास है। यहां तक ​​कि अगर आप कहते हैं "ओह, मैं इस कोड का उपयोग किसी और चीज़ के साथ कभी नहीं करने जा रहा हूं", तो आप (या किसी और) शायद करेंगे। फिर वे कुछ अजीब गणित बग का पता लगाने की कोशिश में तीन दिन बिताएंगे क्योंकि किसी ने आपके पुस्तकालय के मुकाबले थोड़ा अलग मुद्रा से निपटने के लिए नंबर.money () को बढ़ाया। गंभीरता से, मैंने इसे एक बड़ी कंपनी में देखा है और यह किसी के लिए डिबगिंग के लायक नहीं है कि एक पुस्तकालय देव को मूल निवासियों के प्रोटोटाइप के साथ गड़बड़ कर दिया जाए।
फ़्रीकहेड

573

सीएसएस में:

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

80
ओपी एक जेएस समाधान के लिए पूछ रहा है।
एंटोनियो मैक्स

129
। $ ( '# mystring_id') पाठ (स्ट्रिंग) .css ( 'पाठ को बदलने', 'कैपिटल');
DonMB

21
इसके अतिरिक्त, यह केवल स्ट्रिंग के प्रदर्शन को प्रभावित करता है - वास्तविक मूल्य नहीं। यदि यह एक रूप में है, उदाहरण के लिए, मान अभी भी के रूप में प्रस्तुत किया जाएगा।
डेमन्सफील्ड

12
इस जवाब ने मुझे यह महसूस करने में मदद की कि सीएसएस समाधान वास्तव में मैं क्या कर रहा था के लिए अधिक उपयुक्त था। @dudewad: उत्तर में शायद यह डिस्क्लेमर देना चाहिए कि यह जेएस समाधान नहीं है, लेकिन आवश्यकता के आधार पर अधिक उपयुक्त हो सकता है।
joshden

58
इस सवाल पर आने वाले लगभग 80% दर्शकों के लिए, यह सबसे अच्छा जवाब होगा। नहीं एक जवाब के लिए सवाल है, लेकिन करने के लिए समस्या के बजाय।
जीवन

290

यहाँ लोकप्रिय उत्तर का एक छोटा संस्करण है जिसे स्ट्रिंग के रूप में लिखकर पहला अक्षर मिलता है:

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

अपडेट करें:

नीचे दी गई टिप्पणियों के अनुसार यह IE 7 या उससे कम में काम नहीं करता है।

अपडेट 2:

undefinedखाली तारों से बचने के लिए (नीचे @ njzk2 की टिप्पणी देखें ), आप एक खाली स्ट्रिंग की जांच कर सकते हैं:

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

23
यह IE <8 में काम नहीं करेगा, क्योंकि वे ब्राउज़र स्ट्रिंग इंडेक्सिंग का समर्थन नहीं करते हैं। IE8 स्वयं इसका समर्थन करता है, लेकिन केवल स्ट्रिंग शाब्दिकों के लिए - स्ट्रिंग वस्तुओं के लिए नहीं।
मैथियास ब्यनेंस

52
कौन परवाह करता है, IE7 बाजार 5% से कम है! और वे शायद आपके गार्ममा और ग्रेम्पा की पुरानी मशीन हैं। मैं कहता हूं कि शॉर्ट कोड FTW!
विस्कॉन्सिन

@MathiasBynens क्या आप जानते हैं कि यह किसी भी पुराने गैर-IE ब्राउज़र या सिर्फ IE7 को प्रभावित करता है? यदि कोई अन्य ब्राउज़र 2014 में स्ट्रिंग शाब्दिक अनुक्रमण से प्रभावित नहीं हैं, तो हमें ठीक होना चाहिए। :)
हेक्सालिस

3
@vsync मेरा बस यही मतलब था कि आपके उपयोगकर्ता जनसांख्यिकी पर निर्भर करता है, कभी-कभी (हालांकि कम और कम हम 2014 और उसके बाद से गुजरते हैं) यह IE7 जैसे पुराने ब्राउज़र का समर्थन करने के लिए लाभदायक है ...
joshuahedlund

2
@ njzk2 एक रिक्त स्ट्रिंग को संभालने के लिए, आप इसे अपडेट कर सकते हैं: return s && s[0].toUpperCase() + s.slice(1);
joelvh

188

यदि आप पोस्ट किए गए कुछ अलग तरीकों के प्रदर्शन में रुचि रखते हैं:

यहाँ इस जेस्परफ टेस्ट (सबसे तेज़ से सबसे धीमी गति से क्रमबद्ध) पर आधारित सबसे तेज़ तरीके हैं ।

जैसा कि आप देख सकते हैं, पहले दो तरीके अनिवार्य रूप से प्रदर्शन के मामले में तुलनीय हैं, जबकि प्रदर्शन के मामले में 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)प्रदर्शन और भी बढ़ेगा।
प्रेजेमेक

2
उचित विचार। हालांकि यह ध्यान रखें कि कई मामलों में प्रदर्शन हिट भी ध्यान देने योग्य नहीं है: यहां तक ​​कि "सबसे धीमी" दृष्टिकोण 10k में 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
"... लेकिन किसी भी अन्य पत्र के मामले को नहीं बदलते"। यह ओपी द्वारा पूछे गए प्रश्न का सही उत्तर नहीं है।
कार्लोस मुअनज

2
@ कार्लोसमुनाज़ यदि आप शुरुआती वाक्य पढ़ते हैं तो वह कहता है कि यह एक अलग मामले के लिए है।
TMH

3
@TomHart यही कारण है कि यह सवाल का हल नहीं है। यह एक टिप्पणी या एक और सवाल और जवाब होना चाहिए
कार्लोस म्यूनोज़

15
मैं उस पर आपसे सहमत हूं, लेकिन मैं बहुत सारे लोगों को यहां देख रहा हूं जो यह जवाब देते हैं।
टीएमएच

74

यह 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 भागों में परिचय दो भागों में शामिल होने के लिए टेम्पलेट शाब्दिक का उपयोग किया +जाएगा , जबकि केवल 3 को पेश किया जाएगा
Przemek

4
मेरे उत्तर की बात Prz नई ES6 समर्थित विशेषताओं को दर्शाने के लिए है, विशेष रूप से टेम्पलेट शाब्दिक जो अन्य पदों में उल्लिखित नहीं थे। StackOverflow का विचार खोजकर्ता को "विकल्प" देना है। वे इस उत्तर में वर्णित टेम्प्लेट लिटरल्स की अवधारणा को ले सकते हैं और इसे सबस्ट्रिंग बनाम स्लाइस जैसी सूक्ष्म गति संवर्द्धन के साथ जोड़ सकते हैं यदि उनके आवेदन को उन अतिरिक्त सहेजे गए मिलीसेकंड की आवश्यकता होती है। मेरे जवाब में किसी भी यूनिट टेस्टिंग को शामिल नहीं किया गया है, जो यह दिखाने के लिए जाता है कि आपको कभी भी स्टैकऑवरफ्लो उत्तर को सीधे कॉपी नहीं करना चाहिए। मुझे लगता है कि डेवलपर मेरा जवाब लेगा और इसे अनुकूलित करेगा।
स्टर्लिंग बॉर्न

आप यहाँ टेम्पलेट शाब्दिक का उपयोग करने से कुछ नहीं हासिल करते हैं और ${}सिर्फ शोर जोड़ता है। 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'

पहले ऊपरी मामले के लिए वेनिला js:

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

11
मुझे लगता है कि वनिला जेएस के लिए प्राथमिकता होनी चाहिए क्योंकि ज्यादातर लोग एक स्ट्रिंग को कैपिटल करने के लिए केवल एक पूरे ढांचे को डाउनलोड नहीं करेंगे।
जीजीजी

7
मेरी सभी परियोजनाओं में अब तक मैंने कभी भी लॉश नहीं किया है। यह न भूलें कि Google पर अधिकांश लोग इस पृष्ठ पर समाप्त हो जाएंगे, और एक विकल्प के रूप में एक रूपरेखा को सूचीबद्ध करना ठीक है, लेकिन मुख्य उत्तर के रूप में नहीं।
जीजीजी

2
चूंकि अन्य उत्तर वैनिला जेएस का उपयोग करते हैं, इसलिए इसका उत्तर इस तरह से देना अच्छा है, क्योंकि हम में से बहुत से लोग लॉश / अंडरस्कोर का उपयोग करते हैं।
लू रोमन

1
यह सही उत्तर नहीं है क्योंकि ओपी अब जावास्क्रिप्ट में करने के लिए कहता है, एक जावास्क्रिप्ट लाइब्रेरी नहीं, जो आपकी परियोजना के लिए एक संपूर्ण पुस्तकालय के रूप में आयात करता है। इसका उपयोग न करें।
dudewad

1
ओपी का सवाल मेरे जवाब के अंत में वेनिला में है।
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] .subub (1) .toLowerCase ();
मालोविच

4
इस मामले का एक अन्य समाधान: फ़ंक्शन कैपिटलाइज़ फ़र्स्टलेटर्स (s) {रिटर्न s.split ("") .map (फ़ंक्शन (w) {रिटर्न w.charAt (0) .toUpperCase () + w.ububstr (1)}) शामिल हों। ("")} एक अच्छा वन-लाइनर हो सकता है अगर इसे किसी फंक्शन में नहीं रखा जाए।
ल्यूक चेंजिंग

बेहतर होगा कि पहले पूरे स्ट्रिंग को छोटा करें
मैगिको

इस फ़ंक्शन के अलावा अन्य प्रश्न का उत्तर नहीं दे रहे हैं, यह वास्तव में ओवरक्लॉम्पलेटेड है। 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
@ davidkennedy85 ज़रूर! लेकिन यह सबसे सरल तरीका है, सबसे अच्छा तरीका नहीं है; ;-)
युकर्ट

प्रिय प्रभु इस सवाल का एक लाख जवाब है! आपका समाधान es6 में भी अच्छा लग रहा है। 'Answer'.replace(/^./, v => v.toLowerCase())
stwilz


45

यदि आप अंडरस्कोर। Js या लो-डैश का उपयोग करते हैं , तो underscore.string लाइब्रेरी कैपिटल सहित स्ट्रिंग एक्सटेंशन प्रदान करता है:

_.capitalize (स्ट्रिंग) स्ट्रिंग के पहले अक्षर को अपरकेस में परिवर्तित करता है।

उदाहरण:

_.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"

अद्यतन नवंबर 2017 (ES6), सिर्फ FUN के लिए:

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();:।
दान डैस्कलेस्क्यू

44

कम से कम 3 समाधान, 1 और 2 संभाल मामले ऐसे हैं जहां sस्ट्रिंग है "", 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


42

केवल सीएसएस

p::first-letter {
  text-transform: uppercase;
}
  • कहे जाने के बावजूद ::first-letter, यह पहले चरित्र पर लागू होता है , यानी स्ट्रिंग के मामले में %a, यह चयनकर्ता पर लागू होगा %और जैसे aकि इसे कैपिटल नहीं किया जाएगा।
  • IE9 + या IE5.5 + में यह केवल एक बृहदान्त्र ( :first-letter) के साथ विरासत संकेतन में समर्थित है ।

ES2015 वन-लाइनर

चूंकि कई उत्तर हैं, लेकिन ES2015 में कोई भी ऐसा नहीं है जो मूल समस्या को कुशलता से हल करेगा, मैं निम्नलिखित के साथ आया:

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

टिप्पणियों

  • parameters => functionको एरो फंक्शन कहा जाता है
  • मैं capitalizeFirstCharइसके बजाय नाम के साथ चला गया capitalizeFirstLetter, क्योंकि ओपी ने कोड के लिए नहीं कहा था जो पूरे स्ट्रिंग में पहले अक्षर को कैपिटल करता है, लेकिन बहुत पहले चार (यदि यह पत्र है, तो निश्चित रूप से)।
  • const हमें घोषणा करने की क्षमता देता है capitalizeFirstChar निरंतर , जो एक प्रोग्रामर के रूप में वांछित है क्योंकि आपको हमेशा अपने इरादों को स्पष्ट रूप से बताना चाहिए।
  • जिस बेंचमार्क में मैंने परफॉर्म किया था, उसमें कोई खास अंतर नहीं था string.charAt(0)और string[0]। हालांकि, ध्यान दें कि string[0]यह undefinedरिक्त स्ट्रिंग के लिए होगा , इसलिए इसे फिर से लिखना चाहिए string && string[0], जो कि विकल्प की तुलना में बहुत अधिक क्रिया है।
  • string.substring(1)से तेज है string.slice(1)

बेंचमार्क

  • इस समाधान के लिए 4,956,962 op / s ± 3.03%,
  • सर्वाधिक मतदान वाले उत्तर के लिए 4,577,946 op / s 77 1.2%।
  • Google Chrome 57 पर JSBench.me के साथ बनाया गया।

समाधान की तुलना


@ ग्रीन: यह करता है , क्या आप सुनिश्चित हैं कि आपने दो कॉलोन के साथ चयनकर्ता निर्दिष्ट किया है?
प्रेजेमेक

1
आप वास्तव में ईएस 6 में समवर्ती विधि के रूप में प्लस चिह्न (+) का उपयोग नहीं करना चाहते हैं। आप टेम्पलेट शाब्दिक का उपयोग करना चाहते हैं: eslint.org/docs/rules/prefer-template
Sterling Bourne

42

इसे प्रतिस्थापित करके लागू करने का एक बहुत ही सरल तरीका है । ECMAScript 6 के लिए:

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

परिणाम:

'Foo'

1
अब तक का सबसे अच्छा जवाब और रेगेक्स लैम्ब्डा सिंटैक्स दिखाने के लिए अतिरिक्त अंक। मुझे यह विशेष रूप से पसंद है क्योंकि यह कहीं भी एक धाराप्रवाह कट-एंड-पेस्ट हो सकता है।
वेड हैटलर

का उपयोग करने /^[a-z]/iसे बेहतर होगा .कि पहले वाले वर्णमाला के अलावा किसी भी चरित्र को बदलने की कोशिश नहीं करेंगे
कोड Maniac

38

यह सीएसएस में आसान लगता है:

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

यह CSS टेक्स्ट-ट्रांसफ़ॉर्मिंग प्रॉपर्टी ( W3Schools पर ) से है।


28
@ साइमन यह नहीं कहा गया है कि स्ट्रिंग आवश्यक रूप से एक HTML दस्तावेज़ के हिस्से के रूप में आउटपुट होने जा रही है - सीएसएस केवल उपयोग का होने वाला है यदि वह है।
एडम हेप्टन

9
एडम, सच है, लेकिन मुझे लगता है कि जावास्क्रिप्ट के 95% से अधिक HTML और CSS के साथ प्रयोग किया जाता है। दुर्भाग्य से, "कैपिटलाइज़" कथन वास्तव में हर शब्द को कैपिटल करता है , इसलिए आपको स्ट्रिंग के केवल पहले अक्षर को कैपिटल करने के लिए JS की आवश्यकता होगी।
साइमन ईस्ट

18
गलत, दिनेश। उन्होंने कहा कि स्ट्रिंग का पहला चरित्र
साइमन ईस्ट

81
यह जवाब, अपवित्रों की एक हास्यास्पद संख्या होने के बावजूद, सिर्फ गलत है, क्योंकि यह हर शब्द के पहले अक्षर को कैपिटल करेगा । @Ryan, यदि आप इसे हटाते हैं तो आप एक अनुशासित बैज अर्जित करेंगे । कृपया ऐसा करो।
डैन डैस्केलस्कु

10
@DanDascalescu से सहमत - रयान का जवाब पूरी तरह से गलत है।
टिमो


37

CSS का उपयोग करके इस प्रकार के सामान को हमेशा संभालना बेहतर होता है , सामान्य तौर पर, यदि आप CSS का उपयोग करके कुछ हल कर सकते हैं, तो पहले उस पर जाएं, फिर अपनी समस्याओं को हल करने के लिए जावास्क्रिप्ट का प्रयास करें, इसलिए इस मामले :first-letterमें CSS का उपयोग करके देखें और आवेदन करेंtext-transform:capitalize;

तो उसके लिए एक क्लास बनाने का प्रयास करें, ताकि आप इसे विश्व स्तर पर उपयोग कर सकें, उदाहरण के लिए: .first-letter-uppercaseऔर अपने सीएसएस में नीचे जैसा कुछ जोड़ें:

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

37

मुझे सूक्ष्म विमान कोड बिंदुओं या अंतर्राष्ट्रीयकरण से संबंधित मुद्दों के मौजूदा उत्तरों में कोई उल्लेख नहीं मिला । "अपरकेस" का मतलब हर भाषा में दी गई स्क्रिप्ट का उपयोग करना नहीं है।

प्रारंभ में मैंने सूक्ष्म विमान कोड बिंदुओं से संबंधित मुद्दों को संबोधित करने वाले किसी भी उत्तर को नहीं देखा था। वहाँ एक है , लेकिन यह एक बिट दफन है (यह एक तरह होगा, मुझे लगता है!)


अधिकांश प्रस्तावित कार्य इस तरह दिखते हैं:

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

हालांकि, कुछ कैम्ड वर्ण बीएमपी (मूल बहुभाषी विमान, कोड अंक U + 0 से U + FFFF) के बाहर आते हैं। उदाहरण के लिए इस डिस्सेट टेक्स्ट को लें:

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उस पहले (संभव) पत्र को प्राप्त करने के लिए उपयोग कर सकते हैं , लेकिन हमें अभी भी यह निर्धारित करने की आवश्यकता होगी कि स्लाइस कहां से शुरू होनी चाहिए। शेष के पुनरावृत्ति से बचने का एक तरीका यह परीक्षण करना होगा कि क्या पहला कोड बीएमपी के बाहर है; यदि ऐसा नहीं है, तो स्लाइस 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("𐐶𐐲𐑌𐐼𐐲𐑉") // "𐐎𐐲𐑌𐐼𐐲𐑉"

शुरुआत में मैंने अंतर्राष्ट्रीयकरण के विचारों का भी उल्लेख किया। इनमें से कुछ के लिए हिसाब लगाना बहुत मुश्किल है क्योंकि उन्हें ज्ञान की आवश्यकता होती है न केवल किस भाषा का उपयोग किया जा रहा है, बल्कि भाषा में शब्दों के विशिष्ट ज्ञान की भी आवश्यकता हो सकती है। उदाहरण के लिए, आयरिश डाइग्राफ "एमबी" एक शब्द की शुरुआत में "एमबी" के रूप में कैपिटल करता है। एक और उदाहरण, जर्मन एसजेट, कभी भी एक शब्द (एफैक) शुरू नहीं करता है, लेकिन फिर भी समस्या को स्पष्ट करने में मदद करता है। लोअरकेस एज़ेट ("ß") "एसएस" को कैपिटल करता है, लेकिन "एसएस" या तो "s" या "एसएस" को कम कर सकता है - आपको यह जानने के लिए जर्मन भाषा के आउट-ऑफ-बैंड ज्ञान की आवश्यकता है जो सही है!

इस तरह के मुद्दों का सबसे प्रसिद्ध उदाहरण, शायद, तुर्की है। तुर्की लैटिन में, i का पूंजी रूप Latin है, जबकि I का निचला रूप ı है - वे दो अलग-अलग अक्षर हैं। सौभाग्य से हमारे पास इसके लिए एक तरीका है:

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बहुभाषी दस्तावेजों के साथ (आमतौर पर) प्राप्त किया जा सकता है ।

RegExp में यूनिकोड संपत्ति चरित्र वर्गों का समर्थन करने वाले एजेंटों में, जो ES2018 में पेश किए गए थे, हम सीधे उन पात्रों को व्यक्त करके सामान को साफ कर सकते हैं जिनमें हम रुचि रखते हैं:

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

यह काफी अच्छे सटीकता के साथ एक स्ट्रिंग में कई शब्दों को कैपिटलाइज़ करने के लिए थोड़ा सा भी ट्विक किया जा सकता है। CWUया Changes_When_Uppercased चरित्र संपत्ति सब कोड अंक जो, ठीक है, परिवर्तन जब uppercased मेल खाता है। हम डच की तरह एक titlecased संयुक्ताक्षर पात्रों के साथ बाहर इस कोशिश कर सकते हैं ij उदाहरण के लिए:

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

लेखन के समय (फरवरी २०२०), फ़ायरफ़ॉक्स / स्पाइडरमोंकी ने अभी तक पिछले दो वर्षों में शुरू किए गए किसी भी RegExp फीचर को लागू नहीं किया है। आप इस सुविधा की वर्तमान स्थिति को कंगैक्स कम्पेटिटर टेबल पर देख सकते हैं । बैबेल RegExp शाब्दिक को उनके बिना समतुल्य पैटर्न के लिए संपत्ति संदर्भों के साथ संकलित करने में सक्षम है, लेकिन ध्यान रखें कि परिणामी कोड भारी हो सकता है।


सभी संभावना में, यह सवाल पूछने वाले लोगों का संबंध डेसेरिट कैपिटलाइज़ेशन या अंतर्राष्ट्रीयकरण से नहीं होगा। लेकिन इन मुद्दों के बारे में पता होना अच्छा है क्योंकि एक अच्छा मौका है कि आप अंततः उनका सामना करेंगे, भले ही वे वर्तमान में चिंता न करें। वे "एज" मामले नहीं हैं, या यों कहें, वे एज -डेफिनेशन एज के मामले नहीं हैं - एक पूरा देश है जहाँ ज्यादातर लोग तुर्की बोलते हैं, वैसे भी, और कोडपॉइंट्स के साथ कोड इकाइयाँ बनाना बग का एक बहुत ही सामान्य स्रोत है (विशेषकर के साथ) इमोजी के संबंध में)। तार और भाषा दोनों ही बहुत जटिल हैं!


* यूटीएफ -16 / यूसीएस 2 की कोड इकाइयाँ भी इस अर्थ में यूनिकोड कोड पॉइंट हैं, जैसे कि U + D800 तकनीकी रूप से एक कोड पॉइंट है, लेकिन इसका मतलब यह नहीं है कि "यहाँ" ... तरह का ... हालांकि यह सुंदर हो जाता है फजी। सरोगेट्स निश्चित रूप से नहीं हैं, हालांकि, यूएसवी (यूनिकोड स्केलर मान) है।

** हालांकि अगर एक सरोगेट कोड यूनिट "अनाथ" है - यानी, एक तार्किक जोड़ी का हिस्सा नहीं है - आप अभी भी यहां सरोगेट प्राप्त कर सकते हैं।

*** शायद। मैंने इसका परीक्षण नहीं किया है। जब तक आपने निर्धारित नहीं किया है कि कैपिटलाइज़ेशन एक सार्थक अड़चन है, मैं शायद इसे पसीना नहीं करूंगा - जो भी आप मानते हैं उसे चुनें जो सबसे अधिक स्पष्ट और पठनीय है।

**** इस तरह के एक समारोह में पहले के बजाय पहले और दूसरे दोनों कोड इकाइयों का परीक्षण करना चाह सकते हैं, क्योंकि यह संभव है कि पहली इकाई एक अनाथ सरोगेट है। उदाहरण के लिए इनपुट "\ uD800x" एक्स को कैपिटल करेगा, जो कि उम्मीद की जा सकती है या नहीं।

***** यदि आप प्रगति को और अधिक सीधे पालन करना चाहते हैं तो यह बुग्जिला मुद्दा है


1
इस उत्तर को सामने लाने की आवश्यकता है।
रूनर बर्ग

धन्यवाद @ RúnarBerg - चूंकि आपकी टिप्पणी ने मुझे इस बारे में याद दिलाया, मैंने इसे फिर से पढ़ा और महसूस किया कि मैंने एक अंतिम मामले और समाधान को ध्यान में रखते हुए छोड़ दिया था। साथ ही कुछ शब्दावली को बेहतर ढंग से स्पष्ट करने की कोशिश की।
अर्धविराम

शानदार उत्तर .....
बेन एस्टन

यह उत्तर उत्कृष्ट है, मेरी इच्छा है कि मैं इसे और बढ़ा सकूं।
डेविड बार्कर

36

यदि आप ऑल-कैप्स टेक्स्ट को पुन: स्वरूपित करना चाहते हैं, तो आप अन्य उदाहरणों को संशोधित करना चाह सकते हैं:

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

यह सुनिश्चित करेगा कि निम्नलिखित पाठ बदल गया है:

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

शायद यह ध्यान देने योग्य है कि यह
एब्सॉर्म्स

इसके अलावा, क्या GAMITG ने पोस्ट के एक गैर-कोड हिस्से से व्हॉट्सएप का एक टुकड़ा निकालने के लिए वास्तव में एक संपादन किया था ? O_O
मोनोक्रोम

btw, यह बड़े
पैमाने पर योगों

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'

हो गया @ राम। उदाहरण भी शामिल हैं।
फ्रेड्रिक ए।

2009 के उत्तर की तुलना में यह कैसे बेहतर है ?
डैन डस्केल्सस्कु

1
यह @DanDascalescu नहीं है। मुझे लगता है कि आप तर्क दे सकते हैं कि substr/ substringविरोध के रूप में थोड़ा अधिक अर्थपूर्ण है slice, लेकिन यह सिर्फ वरीयता का मामला है। हालाँकि मैंने प्रश्न में दिए गए तार के साथ उदाहरणों को शामिल किया था, जो कि '09 उदाहरण 'में मौजूद एक अच्छा स्पर्श नहीं है। मुझे ईमानदारी से लगता है कि यह 15 साल की उम्र में मुझे स्टैकऑवरफ्लो पर कर्म करना चाहता है;)
फ्रेड्रिक ए।

34

यहाँ एक समारोह है जिसे 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.toUpperCase () कहते हैं और इसे बाकी स्ट्रिंग के साथ जोड़ देता है, जिसे str .substr (1) कहते हैं

आपको लगता है कि यह एक खाली स्ट्रिंग के लिए विफल होगा, और वास्तव में सी जैसी भाषा में आपको इसके लिए पूरा करना होगा। हालाँकि जावास्क्रिप्ट में, जब आप एक खाली स्ट्रिंग का विकल्प लेते हैं, तो आपको बस एक रिक्त स्ट्रिंग मिलती है।


4
String.substring () या String.slice () का उपयोग करें ... रूट का उपयोग न करें () - यह पदावनत है।
जेम्स

7
@ 999: यह कहाँ कहा गया है कि substr()पदावनत किया गया है? यह नहीं है , अब भी, तीन साल बाद, 2009 में अकेले वापस आने दें जब आपने यह टिप्पणी की थी।
Dan Dascalescu

substr()किसी भी लोकप्रिय ECMAScript कार्यान्वयन द्वारा पदावनत के रूप में चिह्नित नहीं किया जा सकता है (मुझे संदेह है कि यह जल्द ही कभी भी गायब नहीं होने वाला है), लेकिन यह ECMAScript युक्ति का हिस्सा नहीं है। कल्पना के तीसरे संस्करण ने "इस मानक के गुणों या उनके शब्दार्थ को बिना हिस्सा बनाए बिना ऐसे गुणों के लिए समान शब्दार्थ का सुझाव दिया है" के लिए गैर-मानक अनुलग्नक में इसका उल्लेख किया गया है।
पीटर रस्ट

2
3 विधियाँ जो समान कार्य करती हैं ( और substring, ) बहुत अधिक हैं, IMO। मैं हमेशा उपयोग करता हूं क्योंकि यह नकारात्मक अनुक्रमित का समर्थन करता है, इसमें भ्रमित करने वाला अर्ग-स्वैपिंग व्यवहार नहीं है और इसकी एपीआई अन्य भाषाओं में समान है । substrslicesliceslice
पीटर रस्ट

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 के जावास्क्रिप्ट संस्करण की तलाश में मिला, जिस पर मुझे संदेह है कि अधिकांश लोग इसे कैसे ढूंढते हैं।
बेनुबर्ड

@DanDascalescu मुझे यह उपयोगी लगा, इसलिए +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
रेगेक्स का उपयोग नहीं किया जाना चाहिए जहां आवश्यक नहीं है। यह बहुत अक्षम है और यह कोड को किसी भी अधिक संक्षिप्त नहीं बनाता है। इसके अलावा, खाली के लिए stringVal[0]होगा , और संपत्ति तक पहुंचने के इस तरह के प्रयास में एक त्रुटि होगी। undefinedstringVal.toUpperCase()
प्रेज़ेमेक

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

(यदि आप इसे बार-बार उपयोग करते हैं, तो आप इसे किसी फ़ंक्शन में एन्क्रिप्ट कर सकते हैं या स्ट्रिंग प्रोटोटाइप में भी जोड़ सकते हैं।)


5
भले ही इसके पास कुछ वोट हैं, लेकिन यह अब तक का सबसे धीमा समाधान है। मैंने इस पोस्ट के सबसे लोकप्रिय उत्तरों के साथ एक छोटा सा स्पीडस्टेस्ट डाला है
Robin van Baalen

@RobinvanBaalen आपका लिंक अब टूट गया है। अपडेटेड मिल गया?
ब्रैड

1
Regexp इसके लिए ओवरकिल है, सरल को प्राथमिकता दें: str.charAt (0) .toUpperCase () + str.slice (1)
सिमोन

@ ब्रैड दुर्भाग्य से नहीं
रॉबिन वैन बालन

अक्सर बार, यदि आप regex के साथ अपनी समस्या को हल करना चाहते हैं, तो आप दो समस्याओं के साथ समाप्त होते हैं।
प्रेज़ेमेक

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

@TarranJones यहां बुलेटप्रूफ वन लाइनर है:(string[0] || '').toUpperCase() + string.substring(1)
dr.dimitru

@ dr.dimitru: मुहावरे के बजाय (string[0] || '')आप बस कर सकते हैं string.charAt(0)
प्रिज़ेमेक


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

मुझे यह तीर कार्य सबसे आसान लगा। अपने स्ट्रिंग के पहले अक्षर वर्ण ( ) से बदलें\w और इसे अपरकेस में कनवर्ट करता है। कुछ भी जरूरी नहीं है।


1
यह स्वीकृत उत्तर होना चाहिए, इसके बजाय यह लगभग अंतिम है क्योंकि एसओ पुराने प्रश्नों को पुरस्कृत करता रहता है। Btw, यह /./दो कारणों से बेहतर है : /\w/सभी पिछले अक्षर नहीं
छोड़ेंगे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.