আমি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিং বড় হাতের অক্ষর তৈরি করব?


3756

আমি স্ট্রিং বড় হাতের প্রথম অক্ষরটি কীভাবে করব, তবে অন্য বর্ণগুলির কোনওটির ক্ষেত্রে পরিবর্তন করব না?

উদাহরণ স্বরূপ:

  • "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)}`
noego

([initial, ...rest]) => [initial.toUpperCase(), ...rest].join("")
Ван Ван

উত্তর:


5802

মূল সমাধানটি হ'ল:

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
সাবস্ট্রিংয়ের চেয়ে সাবস্ট্রিংয়ের চেয়ে বেশি ব্রাউজারে বোঝা যায়
এমপিপ্লুজন

6
করিম 79৯-এ যুক্ত করার জন্য - জাভাস্ক্রিপ্টটি ফাংশন মোড়ানো ছাড়া চলকটিতে একই কাজ করবে বলে সম্ভবত এটি ওভারকিল। আমি মনে করি এটি কোনও ফাংশন ব্যবহার করে আরও স্পষ্ট হবে তবে এর নেটিভ অন্যথায় এটি কেন একটি ফাংশন র‌্যাপার দিয়ে জটিল করবেন?
রস

18
আমাদেরও কি টুকরাটি (1) এর লোয়ারকেস করা উচিত নয়?
হ্যাসেন

177
না, কারণ ওপি এই উদাহরণে দিয়েছেন: the Eiffel Tower -> The Eiffel Tower। এছাড়াও, ফাংশন capitaliseFirstLetterনা বলা হয় capitaliseFirstLetterAndLowerCaseAllTheOthers
-এ নিষিদ্ধ-জিওঞ্জিনিয়ারিং

22
কেউ কি ওওপির গুরুত্বপূর্ণ নিয়মের বিষয়ে চিন্তা করে না? - আপনার নিজের মালিকানাযুক্ত জিনিসগুলি কখনও সম্পাদনা করবেন না? । বিটিডাব্লু, এই ওয়ান- string[0].toUpperCase() + string.substring(1)
লাইনারটি

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
@ আরএক্সজিএক্স - "প্রসারিত করবেন না" বুজিম্যান এখন মারা যেতে শুরু করেছে (godশ্বরকে ধন্যবাদ জানায়), এবং লোকেরা জাস্যান্ড থেকে তাদের মাথা টেনে নিচ্ছে এবং বুঝতে পেরেছে যে এটি কেবল একটি ভাষার বৈশিষ্ট্য। কেবলমাত্র প্রোটোটাইপ.জেস সংক্ষিপ্ত সময়ের জন্য নিজের অবজেক্টকে বাড়িয়েছে, এর অর্থ এই নয় যে নেটিভসকে বাড়ানো খারাপ। আপনি যদি অজানা গ্রাহকের জন্য কোড লিখে থাকেন তবে এটি করা উচিত নয় (বিশ্লেষণমূলক স্ক্রিপ্টের মতো যা এলোমেলো সাইটগুলিতে যায়), তবে এটি ঠিক আছে।
csuwldcat

43
@csuwldcat আপনি যদি না জেনে অন্য কোনও গ্রন্থাগার নিজের মূলধন যোগ করেন তবে কী হবে? প্রোটোটাইপ.জেএস এটি করেছে বা না করে নির্বিশেষে প্রোটোটাইপগুলি প্রসারিত করা খারাপ ফর্ম। ES6 এর সাহায্যে অন্তর্নিবেশগুলি আপনাকে আপনার পিষ্টক রাখতে এবং এটিও খেতে দেয়। আমি মনে করি আপনি সম্ভবত "বুজিম্যান" বিভ্রান্ত করছেন এমন শিম তৈরির লোকদের জন্য মারা যাবেন যা ECMAScript টি অনুমান করে। এই শিমগুলি পুরোপুরি ঠিক আছে কারণ অন্য একটি গ্রন্থাগার যা একটি শিম যুক্ত করেছে এটি একইভাবে এটি প্রয়োগ করবে। যাইহোক, আপনার নিজের অ-নির্দিষ্ট অভ্যন্তর যুক্ত করা এড়ানো উচিত।
জাস্টিন মায়ার

43
নেটিভদের প্রসারিত করা অত্যন্ত খারাপ অভ্যাস। এমনকি যদি আপনি "ওহ আমি এই কোডটি অন্য কোনও কিছুর সাথে ব্যবহার করব না" বললেও আপনি (বা অন্য কেউ) সম্ভবত তা করবেন। তারপরে তারা কিছু অদ্ভুত গণিত বাগ বের করার চেষ্টা করে তিন দিন ব্যয় করবে কারণ কেউ আপনার অন্যান্য লাইব্রেরির চেয়ে কিছুটা আলাদা মুদ্রার সাথে লেনদেন করার জন্য সংখ্যা.মনি () বাড়িয়েছে। গম্ভীরভাবে, আমি এটি একটি বড় সংস্থায় ঘটতে দেখেছি এবং নেটিভ প্রোটোটাইপগুলির সাথে কোনও পাঠানো গ্রন্থাগার খুঁজে বের করার জন্য কারও সময় ডিবাগ করা উপযুক্ত নয়।
ফ্রেইকহেড

572

সিএসএসে:

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

80
ওপি জেএস সমাধান চাইছে।
আন্তোনিও ম্যাক্স

129
। $ ( '# mystring_id') পাঠ্য (STRING) সিএসএস ( 'টেক্সট রুপান্তর', 'পুঁজিতে');
ডোনএমবি

21
অতিরিক্তভাবে, এটি কেবল স্ট্রিংয়ের প্রদর্শনকেই প্রভাবিত করে - আসল মান নয়। যদি এটি কোনও ফর্মে থাকে, উদাহরণস্বরূপ, মানটি এখনও যেমন রয়েছে তেমন জমা দেওয়া হবে।
ড্যান্সফিল্ড

12
এই উত্তরটি আমাকে বুঝতে সাহায্য করেছিল যে আমি যা করছিলাম তার জন্য একটি সিএসএস সমাধান সত্যিই আরও উপযুক্ত। @ দেউদওয়াদ: উত্তরের উত্তরটি সম্ভবত অস্বীকার করা উচিত যে এটি জেএস সমাধান নয় তবে প্রয়োজনের উপর নির্ভর করে আরও উপযুক্ত হতে পারে।
জোশডেন

57
এই প্রশ্নে আগত প্রায় 80% দর্শকের জন্য, এটি সেরা উত্তর হবে। প্রশ্নের উত্তর নয় , পরিবর্তে সমস্যার উত্তর ।
জীবন

289

এখানে জনপ্রিয় উত্তরের একটি সংক্ষিপ্ত সংস্করণ দেওয়া হয়েছে যা স্ট্রিংটিকে অ্যারের হিসাবে বিবেচনা করে প্রথম অক্ষর পায়:

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
এটি << 8 এ কাজ করবে না, কারণ এই ব্রাউজারগুলি স্ট্রিং ইনডেক্সিং সমর্থন করে না। আইই 8 নিজেই এটি সমর্থন করে তবে কেবল স্ট্রিং লিটারেলের জন্য - স্ট্রিং অবজেক্টের জন্য নয়।
ম্যাথিয়াস বাইনেস

52
কে পাত্তা দেয়, আই 7 বাজারটি ৫% এরও কম! এবং এগুলি সম্ভবত আপনার গ্রিম্ম এবং গ্রাম্পার পুরাতন মেশিন। আমি শর্ট কোড এফটিডব্লু বলছি!
vsync

@ ম্যাথিয়াসবাইনেন্স আপনি কি জানেন যে এটি কোনও পুরানো নন-আইই ব্রাউজারগুলি বা কেবল আই 7 কে প্রভাবিত করে? 2014 এ অন্য কোনও ব্রাউজার যদি ইনডেক্সিং স্ট্রিং লিটারাল দ্বারা প্রভাবিত না হয় তবে আমাদের ভাল থাকা উচিত। :)
হেক্সালিজ

3
@vsync আমি শুধু অর্থ আপনার ব্যবহারকারী জনমিতি উপর নির্ভর করে, কখনও কখনও (যদিও কৃতজ্ঞচিত্তে কম হিসাবে আমরা 2014 এবং তার পরেও পাস) এটা পছন্দ পুরানো ব্রাউজারগুলি সমর্থন করার জন্য লাভজনক IE7 ...
joshuahedlund

2
@ njzk2 একটি খালি স্ট্রিং পরিচালনা করতে, আপনি এটি আপডেট করতে পারেন: return s && s[0].toUpperCase() + s.slice(1);
joelvh

187

আপনি পোস্ট করা কয়েকটি ভিন্ন পদ্ধতির পারফরম্যান্সে আগ্রহী হলে:

এই jsperf পরীক্ষার ভিত্তিতে দ্রুততম পদ্ধতিগুলি (দ্রুত থেকে ধীরে ধীরে অর্ডার করা হয়েছে) are

যেমন আপনি দেখতে পাচ্ছেন, প্রথম দুটি পদ্ধতি মূলত পারফরম্যান্সের তুলনায় তুলনীয়, অন্যদিকে পরিবর্তনের 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
দেখে মনে হচ্ছে ইনিশিয়েশন কোডটিও
user420667

5
নোট হিসাবে ভাল, যে প্রতিস্থাপন .slice(1)সঙ্গে .substr(1)এমনকি আরও দক্ষতা বাড়ানোর হবে।
প্রেজেমেক

1
যুক্তিসঙ্গত বিবেচনা। মনে রাখবেন যে অনেক ক্ষেত্রে পারফরম্যান্স হিট এমনকি নজরে আসে না: এমনকি "ধীরতম" পদ্ধতিটি 10 ​​এমএসে 19k স্ট্রিং পরিচালনা করবে। তাই আপনার জন্য ব্যবহার করার জন্য সবচেয়ে স্বাচ্ছন্দ্যজনক একটি নিন।
এডির উদ্ধৃতি দিয়ে

1
যদি কেউ উত্সাহী হন (আমার মতো) বিগত চার বছরে এর পারফরম্যান্সটি কীভাবে বেড়েছে, 2018 ম্যাকবুক প্রোতে তৃতীয় ফাংশনের অপ্স / সেকেন্ডটি 135,307,869 এ রয়েছে, সুতরাং মূলত 12.4 গুণ বেশি গতিযুক্ত।
কার্লো ফিল্ড

150

অন্য মামলার জন্য আমার প্রথম অক্ষরটি মূলধন করা এবং বাকী ছোট হাতের অক্ষর রাখা দরকার। নিম্নলিখিত বিষয়গুলি আমাকে এই ক্রিয়াকলাপটি পরিবর্তন করতে বাধ্য করেছে:

//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
"... তবে অন্য কোনও বর্ণের ক্ষেত্রে পরিবর্তন করা যায় না"। ওপি জিজ্ঞাসা করা প্রশ্নের সঠিক উত্তর নয়।
কার্লোস মুউজ 19

2
@ কার্লোস মিউজোজ আপনি যদি উদ্বোধনী বাক্যটি পড়ে থাকেন তবে তিনি বলেন এটি একটি ভিন্ন মামলার জন্য।
টিএমএইচ

3
@ টমহার্ট ঠিক সে কারণেই এটি প্রশ্নের সমাধান নয়। এটি একটি মন্তব্য বা অন্য প্রশ্নোত্তর হওয়া উচিত
কার্লোস মুউজ

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
আমার উত্তরটির মূল বক্তব্যটি হ'ল নতুন ES6 সমর্থিত বৈশিষ্ট্যগুলি প্রদর্শন করা, বিশেষত টেমপ্লেট লিটারাল যা অন্যান্য পোস্টে উল্লেখ করা হয়নি। স্ট্যাকওভারফ্লো এর ধারণাটি অনুসন্ধানকারীকে "বিকল্পগুলি" দেওয়া। তারা এই উত্তরে বর্ণিত টেম্পলেট লিটারালগুলির ধারণা নিতে পারে এবং এটিকে সাবস্ট্রিং বনাম স্লাইসের মতো মাইক্রো-স্পিড বর্ধনের সাথে একত্রিত করতে পারে যদি তাদের অ্যাপ্লিকেশনটিতে সেই অতিরিক্ত সংরক্ষিত মিলিসেকেন্ডগুলি প্রয়োজন হয়। আমার জবাবটিতে কোনও ইউনিট টেস্টিংও অন্তর্ভুক্ত নেই, যা দেখায় যে আপনার কোনও স্ট্যাকওভারফ্লো উত্তর সরাসরি কপিপিস্ট করা উচিত নয়। আমি ধরে নিয়েছি বিকাশকারী আমার উত্তরটি গ্রহণ করবে এবং এটি মানিয়ে নেবে।
স্টার্লিং বোর্ন

আপনি এখানে টেমপ্লেট আক্ষরিক ব্যবহার থেকে কিছুই অর্জন করেন না এবং ${}কেবল শব্দ যোগ করেন। 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
আমি মনে করি পছন্দটি ভ্যানিলা জসের পক্ষে হওয়া উচিত কারণ বেশিরভাগ লোক কেবল একটি স্ট্রিং মূলধন করতে একটি পুরো কাঠামো ডাউনলোড করে না।
জিজিজি

7
আমার এখনও পর্যন্ত সমস্ত প্রকল্পে আমি লোডাশ ব্যবহার করি নি। হয় তা ভুলে যাবেন না যে গুগলের বেশিরভাগ লোক এই পৃষ্ঠায় শেষ হবে এবং বিকল্প হিসাবে একটি কাঠামো তালিকাবদ্ধ করা ঠিক আছে, তবে প্রধান উত্তর হিসাবে নয়।
জিজিজি

2
যেহেতু অন্যান্য উত্তরগুলি ভ্যানিলা জেএস ব্যবহার করে, তাই এর মতো উত্তর পেতে খুব ভাল লাগে, যেহেতু আমরা প্রচুর লোডাশ / আন্ডারস্কোর ব্যবহার করি।
লু রোমান

1
এটি সঠিক উত্তর নয় কারণ ওপি এখন জাভাস্ক্রিপ্টে এটি করতে বলেছে, কোনও জাভাস্ক্রিপ্ট লাইব্রেরি নয়, যা আপনার প্রকল্পের নির্ভরতা হিসাবে পুরো লাইব্রেরিটি আমদানি করে। এটি ব্যবহার করবেন না।
দুদেওয়াদ

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] = জ + টুকরা [i]। সাবস্ট্রিট (1) .toLowerCase ();
মালোভিচ

4
এই মামলার আর একটি সমাধান: ফাংশন ক্যাপিটাল ফার্স্ট লেটার (গুলি) {রিটার্ন এস.স্প্লিট ("") ("") It's যদি কোনও ফাংশন না করা হয় তবে একটি দুর্দান্ত ওয়ান-লাইনার হতে পারে।
লুক চ্যানিংস

প্রথমে পুরো স্ট্রিংটি ছোট করে রাখা ভাল
ম্যাজিকো

এই ফাংশনটি প্রশ্নের উত্তর না দেওয়া ব্যতীত, এটি আসলে অত্যধিক জটিলও। 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
নিবন্ধন করুন তবে এটি সহজ উপায়, সর্বোত্তম উপায় নয় ... ;-)
ইয়াকার্ট

প্রিয় প্রভু এই প্রশ্নের এক মিলিয়ন উত্তর আছে! আপনার সমাধানটি এস -6-তে আরও সুন্দর দেখায়। 'Answer'.replace(/^./, v => v.toLowerCase())
stwilz


45

আপনি যদি আন্ডারস্কোর.জেএস বা লো-ড্যাশ ব্যবহার করেন তবে আন্ডারস্কোর স্ট্রিং লাইব্রেরি মূলধন সহ স্ট্রিং এক্সটেনশন সরবরাহ করে:

_কাপিটালাইজ (স্ট্রিং) স্ট্রিংয়ের প্রথম বর্ণটিকে বড় হাতের মধ্যে রূপান্তর করে।

উদাহরণ:

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

3
সংস্করণ 3.0.০.০ থেকে লো-ড্যাশের ডিফল্টরূপে এই স্ট্রিং পদ্ধতি উপলব্ধ রয়েছে। শুধু এই উত্তর বর্ণিত: _.capitalize("foo") === "Foo"
bardzusny

এছাড়াও রয়েছে ইউফুল আন্ডারস্কোর.জেএস ফাংশন humanize। এটি একটি আন্ডারকর্ডড, উটযুক্ত বা ড্যাশারাইজড স্ট্রিংটিকে হিউম্যানাইজড স্ট্রিংয়ে রূপান্তর করে। শ্বেত স্পেসের শুরু এবং শেষ হওয়া সরিয়ে দেয় এবং '_id' পোস্টফিক্স সরিয়ে দেয়।
স্টেপান জাখারভ 14

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"

কেবলমাত্র মজাদার জন্য নভেম্বরের 6, ২০১ E (ইএস 6) আপডেট করুন:

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 কারণে এটি একটি দুর্বল সমাধান: আদিমের প্রোটোটাইপ সংশোধন করা একটি খারাপ ধারণা। যদি বৈশিষ্ট পরিবর্তন হয় এবং তারা নতুন প্রোটোর সম্পত্তি নাম হিসাবে 'মূলধন' বাছাই করার সিদ্ধান্ত নেয়, আপনি মূল ভাষার কার্যকারিতা ভঙ্গ করছেন। এছাড়াও, নির্বাচিত পদ্ধতির নামটি দরিদ্র। প্রথম নজরে, আমি মনে করি এটি পুরো স্ট্রিংকে মূলধন করবে। আরও বর্ণনামূলক নাম যেমন পিএইচপি-র ইউসি ফার্স্ট বা অনুরূপ কিছু ব্যবহার করা আরও ভাল ধারণা হতে পারে।
দুদেওয়াদ

অন্যান্য 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মূলধন হবে না।
  • আইই 9 + বা আই 5.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 অপশন / গুলি s 3.03% এই সমাধানের জন্য,
  • সর্বাধিক ভোট দেওয়া উত্তরের জন্য 4,577,946 অপি / এস ± 1.2%।
  • গুগল ক্রোম 57 এ জেএসবেঞ্চ.মে দিয়ে তৈরি ।

সমাধানগুলির তুলনা


@ গ্রীন: এটি করে , আপনি কি নিশ্চিত যে দুটি নির্বাচিত নির্বাচিতকে দুটি কলোন দিয়ে নির্দিষ্ট করেছেন?
প্রজেমেক

1
আপনি বাস্তবে ES6 এ সংযুক্তি পদ্ধতি হিসাবে প্লাস চিহ্ন (+) ব্যবহার করতে চান না। আপনি টেমপ্লেট আক্ষরিক
স্টার্লিং বোর্ন

42

প্রতিস্থাপন দ্বারা এটি বাস্তবায়নের একটি খুব সহজ উপায় আছে । ECMAScript 6 এর জন্য:

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

ফলাফল:

'Foo'

1
এখন পর্যন্ত সেরা উত্তর এবং রেজেেক্স ল্যাম্বদা সিনট্যাক্স দেখানোর জন্য অতিরিক্ত পয়েন্ট। আমি বিশেষত এটি পছন্দ করি কারণ এটি যে কোনও জায়গায় সাবলীল কাট-পেস্ট হতে পারে।
ওয়েড হ্যাটলার

ব্যবহার /^[a-z]/iব্যবহার চেয়ে ভাল হবে .পূর্বে এক হিসাবে বর্ণমালার ছাড়া অন্য কোনো চরিত্র বদল চেষ্টা করবে না
কোড ক্ষিপ্ত

38

সিএসএসে এটি আরও সহজ বলে মনে হচ্ছে:

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

এটি CSS টেক্সট-ট্রান্সফর্ম সম্পত্তি থেকে ( ডাব্লু 3 স্কুলগুলিতে )।


28
@ সিমন এটি উল্লেখ করেন নি যে স্ট্রিংটি এইচটিএমএল ডকুমেন্টের অংশ হিসাবে আউটপুট হতে চলেছে - সিএসএস কেবল তখনই কার্যকর হবে যদি তা হয়।
অ্যাডাম হেপটন

9
আদম, সত্য, তবে আমি অনুমান করতে পারি যে জাভাস্ক্রিপ্টের 95% এরও বেশি HTML এবং CSS ব্যবহার করা হয়েছে। দুর্ভাগ্যক্রমে, "মূলধন" বিবৃতিটি প্রতিটি শব্দকে মূলধন করে , সুতরাং আপনার স্ট্রিংয়ের কেবলমাত্র প্রথম অক্ষরকে মূলধন করতে জেএস প্রয়োজন।
সাইমন পূর্ব

18
ভুল, দীনেশ তিনি স্ট্রিংয়ের প্রথম চরিত্রটি বলেছেন ।
সাইমন পূর্ব

81
এই উত্তরটি, একটি হাস্যকর সংখ্যক উপাখ্যান থাকা সত্ত্বেও, এটি ঠিক ভুল, কারণ এটি প্রতিটি শব্দের প্রথম অক্ষরকে বড় করে দেবে । @ রায়ান, আপনি যদি এটিকে মুছে ফেলেন তবে আপনি একটি শৃঙ্খলাবদ্ধ ব্যাজ উপার্জন করবেন । অনুগ্রহপূর্বক তা - ই করো.
ড্যান ড্যাসক্লেস্কু

10
@ ড্যানডাসকলেসকুতে সম্মত হন - রায়ের উত্তর সম্পূর্ণ ভুল।
টিমো


37

এটা সবসময় ভাল ব্যবহার কাপড় এই ধরনের হ্যান্ডেল করতে প্রথম সিএসএস ব্যবহার করে এই ক্ষেত্রে চেষ্টা সাধারণভাবে, আপনি সিএসএস ব্যবহার করে কিছু সমাধান করতে পারে, তাহলে সেই জন্য যেতে প্রথম, তারপর আপনার সমস্যার সমাধানের জাভাস্ক্রিপ্ট চেষ্টা, তাই :first-letterসিএসএস এবং আবেদন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'

36

আপনি যদি সমস্ত ক্যাপস পাঠ্য পুনরায় ফর্ম্যাট করতে চান তবে আপনি অন্যান্য উদাহরণগুলি যেমন:

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

এটি নিশ্চিত করবে যে নীচের পাঠ্যটি পরিবর্তিত হয়েছে:

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

সম্ভবত এটি লক্ষণীয় যে
এটির দ্বারা সংক্ষিপ্ত রূপের

এছাড়াও, গ্যামিটজি কি পোস্টের একটি নন-কোড অংশ থেকে কেবল সাদা অংশের টুকরো অপসারণ করার জন্য একটি সম্পাদনা করেছিল? O_O
monokrome

বিটিডব্লিউ, এটি বড় হাতের
অক্ষরগুলি

36

অ্যাস্ট্রাল প্লেন কোড পয়েন্ট বা আন্তর্জাতিকীকরণ সম্পর্কিত ইস্যুগুলির বিদ্যমান উত্তরের আমি কোনও উল্লেখ দেখতে পাইনি । "বড় হাতের" অর্থ প্রদত্ত স্ক্রিপ্ট ব্যবহার করে প্রতিটি ভাষায় একই জিনিস বোঝায় না।

প্রথমদিকে আমি অ্যাস্ট্রাল প্লেন কোড পয়েন্ট সম্পর্কিত ইস্যু সম্বোধনের কোনও উত্তর দেখতে পাইনি। সেখানে এক , কিন্তু এটি একটি বিট দাফন এর (এই এক মত হতে হবে, আমি অনুমান!)


প্রস্তাবিত ফাংশনগুলির বেশিরভাগ দেখতে এইরকম:

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

তবে কিছু কেসযুক্ত অক্ষর বিএমপির বাইরে পড়ে (বেসিক বহুভাষিক বিমান, কোড পয়েন্ট U + 0 থেকে ইউ + এফএফএফএফ)। উদাহরণস্বরূপ এই Deseret পাঠ্য গ্রহণ করুন:

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

এখানে প্রথম অক্ষর মূলধন ব্যর্থ হয় কারণ অ্যারের-সূচিযুক্ত বৈশিষ্ট্যের স্ট্রিংগুলির "অক্ষর" বা কোড পয়েন্ট * অ্যাক্সেস হয় না। তারা ইউটিএফ -16 কোড ইউনিট অ্যাক্সেস করে। টুকরো টুকরো করার সময়ও এটি সত্য - কোড ইউনিটগুলিতে সূচকের মান বিন্দু।

এটি এমনটি ঘটে যে ইউটিএফ -১ code কোড ইউনিটগুলি দুটি রেঞ্জের মধ্যে ইউএসভি কোড পয়েন্ট সহ 1: 1 হয়, U + 0 থেকে U + D7FF এবং U + E000 থেকে U + FFFF অন্তর্ভুক্ত থাকে। বেশিরভাগ কেসযুক্ত অক্ষরগুলি এই দুটি ব্যাপ্তিতে পড়ে তবে সেগুলির সবকটিই নয়।

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 এবং নীচেও এই কাজটি করতে পারি। কোডপয়েন্টের সাথে কাজ করার জন্য ইএস 5 তে কোনও অন্তর্নিহিত পদ্ধতি নেই, সুতরাং আমাদের প্রথম কোড ইউনিটটি কোনও সারোগেট কিনা তা ম্যানুয়ালি পরীক্ষা করতে হবে ****:

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("𐐶𐐲𐑌𐐼𐐲𐑉") // "𐐎𐐲𐑌𐐼𐐲𐑉"

শুরুতে আমি আন্তর্জাতিকীকরণ বিবেচনার বিষয়টিও উল্লেখ করেছি। এর মধ্যে কিছু কারণ তারা না শুধুমাত্র জ্ঞান থাকা আবশ্যক হিসাব খুব কঠিন হয় কি ভাষাটি ব্যবহার করা হচ্ছে তা নয়, তবে ভাষার শব্দগুলির নির্দিষ্ট জ্ঞানের প্রয়োজনও থাকতে পারে knowledge উদাহরণস্বরূপ, আইরিশ ডিগ্রাফ "এমবি" একটি শব্দের শুরুতে "এমবি" হিসাবে মূলধন করে। আরেকটি উদাহরণ, জার্মান এসেট, কখনও কোনও শব্দ (আফাইক) শুরু করে না, তবে তবুও সমস্যাটি বোঝাতে সহায়তা করে। লোয়ারকেস এসেট ("ß") "এসএস" এর মূলধন করে তবে "এসএস" "ß" বা "এসএস" এর মধ্যে ছোট করে দিতে পারে - কোনটি সঠিক তা জানতে আপনার জার্মান ভাষার বাইরের ব্যান্ড জ্ঞান প্রয়োজন!

এই ধরণের সমস্যার সর্বাধিক বিখ্যাত উদাহরণ হ'ল তুর্কী। তুর্কি লাতিন ভাষায়, আমার মূলধন হ'ল while, যখন আমি ছোট হাতের আকার ı - এগুলি দুটি ভিন্ন বর্ণ। ভাগ্যক্রমে আমাদের কাছে এটির অ্যাকাউন্ট দেওয়ার উপায় রয়েছে:

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

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

একটি ব্রাউজারে, ব্যবহারকারীর সর্বাধিক পছন্দের ভাষা ট্যাগটি নির্দেশিত হয় navigator.language, পছন্দ অনুসারে একটি তালিকা পাওয়া যায় navigator.languagesএবং একটি প্রদত্ত ডিওএম উপাদানটির ভাষা 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), ফায়ারফক্স / স্পাইডারমনকি গত দুই বছরে প্রবর্তিত কোনও রেজিএক্সপ ফিচার ***** এখনও কার্যকর করেনি ** আপনি কঙ্গাক্স কম্প্যাট টেবিলটিতে এই বৈশিষ্ট্যের বর্তমান অবস্থা পরীক্ষা করতে পারেন । বাবেল রেজিপ্লেষের অক্ষরগুলিকে সম্পত্তির রেফারেন্সগুলি ছাড়াই তাদের ব্যতীত সমষ্টি নিদর্শনগুলির সাথে সংকলন করতে সক্ষম হয়, তবে সচেতন হন যে ফলাফল কোডটি প্রচুর হতে পারে।


সমস্ত সম্ভাবনায়, এই প্রশ্নটি জিজ্ঞাসা করা লোকেরা ডিসেরেট মূলধন বা আন্তর্জাতিকীকরণের সাথে উদ্বিগ্ন হবে না। তবে এই বিষয়গুলি সম্পর্কে সচেতন হওয়া ভাল কারণ আপনার বর্তমানে উদ্বেগ না থাকলেও অবশেষে তাদের মুখোমুখি হওয়ার একটি ভাল সুযোগ রয়েছে। এগুলি "প্রান্ত" কেস নয়, বরং তারা উপ-সংজ্ঞা প্রান্তের মামলা নয় - এমন একটি পুরো দেশ রয়েছে যেখানে বেশিরভাগ লোক তুর্কি, যে কোনওভাবেই কথা বলে এবং কোডপয়েন্টের সাথে কোড ইউনিটকে বিভক্ত করা একটি বাগের মোটামুটি সাধারণ উত্স (বিশেষত সাথে ইমোজি সম্পর্কিত)। স্ট্রিং এবং ভাষা উভয়ই বেশ জটিল!


* ইউটিএফ -16 / ইউসিএস 2 এর কোড ইউনিটগুলি ইউনিকোড কোড পয়েন্টও এই অর্থে যে ইউ + ডি 800 প্রযুক্তিগতভাবে একটি কোড পয়েন্ট, তবে এটি এখানে "অর্থ" নয় ... সাজানো ... যদিও এটি সুন্দর হয়ে যায় ঝাপসা। সরোগেটগুলি অবশ্যই ইউএসভি (ইউনিকোড স্কেলারের মান) নয়।

** যদিও কোনও সারোগেট কোড ইউনিট যদি "অনাথ" হয় - অর্থাত্ লজিক্যাল জোড়ের অংশ না হয় - তবে আপনি এখানেও সারোগেট পেতে পারেন।

*** হতে পারে. আমি এটি পরীক্ষা করিনি। যদি আপনি নির্ধারণ না করেন যে মূলধনটি অর্থবহ এক বাধা হয়ে দাঁড়ায়, আমি সম্ভবত এটি ঘামতে পারব না - আপনি যা বিশ্বাস করেন তা সবচেয়ে স্পষ্ট এবং পঠনযোগ্য চয়ন করুন।

**** এই জাতীয় ফাংশন কেবল প্রথমটির পরিবর্তে প্রথম এবং দ্বিতীয় কোড একক উভয়ই পরীক্ষা করতে পারে, কারণ এটি প্রথম ইউনিট অনাথ সারোগেটের পক্ষে সম্ভব। উদাহরণস্বরূপ ইনপুট "D uD800x" এক্সকে যেমন হয় তেমন মূলধন তৈরি করবে, যা প্রত্যাশিত বা নাও হতে পারে।

***** আপনি যদি আরও সরাসরি অগ্রগতি অনুসরণ করতে চান তবে এখানে বাগজিলা সমস্যা রয়েছে


1
এই উত্তরটি সামনের দিকে সরানো দরকার।
রোনার বার্গ

ধন্যবাদ @ রোনারবার্গ - যেহেতু আপনার মন্তব্যটি আমাকে এ সম্পর্কে স্মরণ করিয়ে দিয়েছে, আমি আবার এটি পড়েছি এবং বুঝতে পেরেছিলাম যে আমি একটি চূড়ান্ত মামলা এবং সমাধানটি উল্লেখ করার মতো রেখেছি। কিছু পরিভাষা আরও ভাল করে স্পষ্ট করার চেষ্টা করেছিল।
সেমিকোলন

দুর্দান্ত উত্তর .....
বেন অ্যাস্টন

এই উত্তরটি দুর্দান্ত, আমি আশা করি আমি এটি আরও উত্সাহ দিতে পারতাম।
ডেভিড বার্কার

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'

সম্পন্ন @ রম। উদাহরণ অন্তর্ভুক্ত।
ফ্রেডরিক এ


1
এটি ড্যানডাসক্লেস্কু নয় আমি মনে করি আপনি যে যুক্তি দিতে পারেন substr/ এর substringবিপরীতে কিছুটা শব্দার্থক sliceতবে এটি কেবল পছন্দের বিষয়। তবে আমি প্রশ্নের মধ্যে দেওয়া স্ট্রিংগুলির সাথে উদাহরণগুলি অন্তর্ভুক্ত করেছি, যা '09 উদাহরণে একটি দুর্দান্ত স্পর্শ উপস্থিত নেই। আমি সত্যই মনে করি এটি স্ট্যাকওভারফ্লোতে কর্ম করতে চাইলে আমার বয়স ১৫ বছরের নীচে নেমে আসে;)
ফ্রেডরিক এ।

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"

এটি স্ট্রিংকে দুটি টুকরো করে বিভক্ত করে কাজ করে। প্রথম লাইনে এটি ফার্স্ট লেটারটি বের করে এবং তারপরে দ্বিতীয় লাইনে এটি ফার্স্ট লেটার.টু আপারকেস () কল করে ফার্স্ট লেটারকে মূলধন করে এবং বাকী স্ট্রিংয়ের সাথে যোগ দেয়, যা স্ট্রিংসবুস্ট্র (1) কল করে পাওয়া যায় ।

আপনি মনে করতে পারেন যে এটি একটি খালি স্ট্রিংয়ের জন্য ব্যর্থ হবে, এবং প্রকৃতপক্ষে সি এর মতো একটি ভাষাতে আপনাকে এটি সরবরাহ করতে হবে। তবে জাভাস্ক্রিপ্টে, আপনি যখন খালি স্ট্রিংয়ের একটি স্ট্রিং নেন, আপনি কেবল একটি খালি স্ট্রিং ফিরে পাবেন।


4
স্ট্রিং.সুবস্ট্রিং () বা স্ট্রিং.স্লাইস () ব্যবহার করুন ... সাবস্ট্রাস্ট () ব্যবহার করবেন না - এটি অবমূল্যায়িত।
জেমস

7
@ 999: এটি কোথায় অবহিত বলে substr()? এটি নয় , এখন থেকে, তিন বছর পরে, ২০০৯ এ ফিরে আসুন যখন আপনি এই মন্তব্য করেছিলেন।
ড্যান ড্যাসক্লেস্কু

substr()কোনও জনপ্রিয় ECMAScript প্রয়োগের দ্বারা অবহেলিত হিসাবে চিহ্নিত নাও করা যেতে পারে (আমি সন্দেহ করি যে এটি শীঘ্রই যে কোনও সময় অদৃশ্য হয়ে যাবে না) তবে এটি ইসমাস্ক্রিপ্ট অনুচ্ছেদের অংশ নয়। অনুমানের তৃতীয় সংস্করণে "এই বৈশিষ্ট্যের বৈশিষ্ট্য বা তাদের শব্দার্থবিজ্ঞানের অংশ না তৈরি করে এ জাতীয় সম্পত্তির জন্য অভিন্ন শব্দার্থবিজ্ঞানের পরামর্শ দেওয়ার জন্য" অ-আদর্শিক সংযুক্তিতে এটির উল্লেখ রয়েছে।
পিটার মরিচ

2
3 পদ্ধতি একই জিনিস করে (রয়ে substring, substrএবং slice) আইএমও অনেকগুলি হয়। আমি সর্বদা ব্যবহার করি sliceকারণ এটি নেতিবাচক সূচকে সমর্থন করে, এতে বিভ্রান্তিকর আরগ-অদলবদল আচরণ নেই এবং এর এপিআই sliceঅন্যান্য ভাষার মতো।
পিটার জং

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 এর জাভাস্ক্রিপ্ট সংস্করণ খুঁজছি, যা আমি সন্দেহ করি যে বেশিরভাগ লোকেরা এটি কীভাবে সন্ধান করে।
বেনুবার্ড

@ ড্যানডাসকলেস্কু আমি এই দরকারী বলে মনে করেছি, সুতরাং +1 উপযোগবাদ এবং -1 পায়ুপথ পুনরুদ্ধার। তিনি একটি উদাহরণ অন্তর্ভুক্ত করেছিলেন, সুতরাং এটির কার্যকারিতা স্পষ্ট।
ট্র্যাভিস ওয়েব

String.prototype.capitalize = function(){ return this.replace( /(^|\s)[a-z]/g , function(m){ return m.toUpperCase(); }); }; আমি আপনার কোডটি কিছুটা রিফ্যাক্টর করছি, আপনার কেবল প্রথম ম্যাচ দরকার।
ইগ্রাচ


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
যদিও এর বেশ কয়েকটি ভোট রয়েছে, এটি এখানে পোস্ট করা সবচেয়ে ধীরতম সমাধান। আমি এই পোস্টের সর্বাধিক জনপ্রিয় উত্তরগুলির সাথে একসাথে কিছুটা দ্রুত রেখেছি
রবিন ভ্যান বালেন

@ রবিনভানবাওয়ালেন আপনার লিঙ্কটি এখন নষ্ট হয়ে গেছে। একটি আপডেটেড পেয়েছেন?
ব্র্যাড

1
রেজিএক্সএক্স এর জন্য ওভারকিল, সহজটিকে পছন্দ করুন: str.charAt (0) .toUpperCase () + str.slice (1)
সাইমন

@ ব্র্যাড দুর্ভাগ্যক্রমে নয়
রবিন ভ্যান বালেন

প্রায়শই সময়, আপনি যদি রেইগেক্স দিয়ে আপনার সমস্যাটি সমাধান করতে চান তবে আপনি দুটি সমস্যার সাথে শেষ করেন।
প্রেজেক

19

ucfirstফাংশন কাজ করে যদি আপনি এটা ভালো না।

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

প্রশস্ততা জন্য জেপি ধন্যবাদ।


2
ফাংশনের সুন্দর নাম! এটির নামটি পিএইচপি সমতুল্য। জেএসে আসলে পিএইচপি ফাংশনগুলির একটি সম্পূর্ণ গ্রন্থাগার রয়েছে; এটিকে পিএইচপি.জেস বলা হয় এবং এটি http://phpjs.org
হুসাম

11
একটি লাইনার:string[0].toUpperCase() + string.substring(1)
dr.dimitru

@ তারানজোনস এখানে বুলেটপ্রুফ ওয়ান লাইনার:(string[0] || '').toUpperCase() + string.substring(1)
dr.dimitru

@ dr.dimitru: মূর্খতার পরিবর্তে (string[0] || '')আপনি ঠিক করতে পারেন string.charAt(0)
প্রেজেমেক


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

আমি এই তীর ফাংশনটি সবচেয়ে সহজ খুঁজে পেয়েছি। আপনার স্ট্রিংয়ের প্রথম অক্ষরের অক্ষর ( ) এর সাথে প্রতিস্থাপন করে\w এবং এটি বড় হাতের সাথে রূপান্তর করে। কিছুই fancier প্রয়োজন।


1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, পরিবর্তে এটি প্রায় শেষ যেহেতু এসও পুরানো প্রশ্নগুলি প্রদান করে। বিটিডব্লিউ, এটি /./দুটি কারণে ভাল ব্যবহার করা হয়েছে: /\w/সমস্ত পূর্ববর্তী অক্ষর অক্ষরগুলি এড়িয়ে যাবেন (সুতরাং @@ অ্যাবসি @@ অ্যাবসি হয়ে যাবে), এবং তারপরে এটি লাতিন নয় এমন অক্ষরের সাথে কাজ করে না
ক্রিশ্চিয়ান ট্র্যানা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.