জাভা স্ক্রিপ্টের সাথে স্ট্রিংটিকে শিরোনামের ক্ষেত্রে রূপান্তর করুন


548

কোনও স্ট্রিংকে শিরোনামের ক্ষেত্রে রূপান্তর করার কোনও সহজ উপায় আছে? যেমন john smithহয়ে যায় John Smith। আমি জন রেসিগের সমাধানের মতো জটিল কিছু খুঁজছি না , কেবল (আশাবাদী) এক ধরণের এক-বা দুই-লাইনার।


বিভিন্ন পদ্ধতি আছে, আমাদের কিছু পারফরম্যান্সের পরিসংখ্যান রয়েছে?
আনুভব

এই সংক্ষিপ্ত উত্তর chech দয়া করে stackoverflow.com/a/57689168/10373693 আমি আশা করি যে উত্তর যা আপনি খুঁজছেন হবে।
অভিষেক কুমার

উত্তর:


738

এটা চেষ্টা কর:

    function toTitleCase(str) {
        return str.replace(
            /\w\S*/g,
            function(txt) {
                return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
            }
        );
    }
<form>
Input:
<br /><textarea name="input" onchange="form.output.value=toTitleCase(this.value)"  onkeyup="form.output.value=toTitleCase(this.value)"></textarea>
<br />Output:
<br /><textarea name="output" readonly onclick="select(this)"></textarea>
</form>


14
কেউ দয়া করে ব্যাখ্যা করতে পারেন, \w\S*পরিবর্তে \w+বা \w*উদাহরণস্বরূপ কেন ব্যবহৃত হয় ? আমি জানি না কেন তুমি কিছুই কিন্তু শূণ্যস্থান অন্তর্ভুক্ত এবং সেইজন্য পরিবর্তন করতে চাইবেন না জিম-বব থেকে জিম-বব
মার্টিনজারভি

5
@martinCzerwi \w\S*এছাড়াও সৃষ্ট Jim-bobআমাদের প্রান্তে সমস্যা। এটি \w*সমাধান করে ।
বুকে

14
/([^\W_]+[^\s-]*) */gসমস্যার সমাধান করে Jim-Bob, যেমন:jim-bob --> Jim-Bob
recursion.ninja

15
যদি jim-bob --> Jim-Bobআপনার ইচ্ছা হয়, আপনার সম্ভবত করা উচিত /\b\w+/g। উদাহরণ:str.replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();});
ভোলআরন

3
\w\S*এর পরিবর্তে \w+বা \w*তাই ব্যবহৃত হয় যাতে শব্দগুলি Don'tপরিবর্তিত হয় না Don'T, তবে অন্যরা \w\S*হাইফেনেটেড শব্দের কারণে সমস্যাগুলির কারণ দেখায় ।
ডাবলডাউন

198

গ্রেগ ডিনের কার্যকারিতাটি গ্রহণ করে কিছুটা মার্জিত উপায়:

String.prototype.toProperCase = function () {
    return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};

এটিকে কল করুন:

"pascal".toProperCase();

3
মনে রাখবেন যদি আপনি তাদের নামটি দিয়ে একটি ড্যাশ দিয়ে একটি ব্যবহারকারী আছে এবং তারা প্রবেশ Jo-Ann Smith, এই কোড তাদের রূপান্তর হবে Jo-ann Smith(ছোট হাতের অক্ষর ব্যবহার করে নোট aমধ্যে Ann)।
dbau

18
@ লাডিয়েলম্ব কেন তার স্ট্রিং প্রোটোটাইপ পরিবর্তন করবেন না? আমি এটি একটি ভাল সমাধান বলে মনে করি। রুবি ওপেন ক্লাসগুলির কথা ভাবেন, বিদ্যমান ক্লাসগুলিতে ফাংশন যুক্ত করা এটি পুরোপুরি বৈধ এবং এটি ব্যাপকভাবে গ্রহণযোগ্য।
মার্কো ফিসেট

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

5
@ লাডিয়েলম্ব একটি দুর্দান্ত পয়েন্ট পদ্ধতির নাম উপসর্গ করা এটিকে এড়াতে সহায়তা করা উচিত, কারণ পদ্ধতিটি অগণনীয় হয়ে উঠবে।
মাইকমেকানা

60
আমার মনে হয় "নেটিভ জাভাস্ক্রিপ্ট অবজেক্টগুলিকে সংশোধন করবেন না" বিবৃতিটি "গোটো কখনই ব্যবহার করবেন না" বা "অ্যাভাল ইজ অশুভ" এর মত like এটি বেশিরভাগ ক্ষেত্রে রয়েছে। যদি আপনার প্রকল্পের সম্পূর্ণ নিয়ন্ত্রণ থাকে এবং অবশ্যই এটি একটি গ্রন্থাগার হিসাবে প্রকাশের পরিকল্পনা না করেন তবে আমি এই পদ্ধতিতে কোনও সমস্যা দেখছি না।
ফক্সমুল্ডার900

175

আপনার নিয়ন্ত্রণগুলিতে পাঠ্য-রূপান্তরকারী CSS স্টাইল প্রয়োগ করার চেষ্টা করুন ।

উদাহরণ: (text-transform: capitalize);

যখন একেবারে প্রয়োজন হয় তখনই জেএস পদ্ধতির ব্যবহার করুন।


36
-1। এই সিএসএসটি কাজ করে তবে বেশিরভাগ লোকেরা প্রত্যাশা মতো কাজ করে না কারণ পাঠ্যটি যদি সমস্ত ক্যাপ হিসাবে শুরু হয় তবে কোনও প্রভাব নেই। ওয়েবমাস্টারওয়ার্ল্ড.ফরম
83

2
@ আকাশ: একটি ছোট হাতের বিধি একটি শিরোনাম কেস রুল দ্বারা প্রতিস্থাপিত হবে। সিএসএস যেহেতু উত্স সামগ্রীটি পরিবর্তন করে না, এর প্রভাবটি হ'ল ছোট হাতের বিধি সরানো হয় (উত্সের সামগ্রীটি সমস্ত ক্যাপগুলিতে রেখে) এবং তারপরে টাইটলেজ বিধি প্রয়োগ করা হবে (কিছুই না করে)।
dokkaebi

42
জেএস বাইরে ব্রাউজার ব্যবহার করা হয়।
মাইকমেকানা

4
প্রশ্নটি ছিল: "কোনও স্ট্রিংকে শিরোনামের ক্ষেত্রে রূপান্তর করার কোনও সহজ উপায় আছে কি?" । এই উত্তরটি কোনও স্ট্রিংকে রূপান্তর করে না। এটি স্ট্রিংয়ের উপরে প্রয়োগ করা একটি স্টাইল।
কিংপ্পি

আপনি যদি নিজের ডাটাবেসে ডেটা পরিষ্কার থাকতে চান, যাতে তৃতীয় পক্ষের পরিষেবাগুলিতে যাওয়ার সময় বা সিএসভিতে রফতানি করার সময় এটি পরিষ্কার ব্যবহার করা যায়, তবে সিএসএস সত্যই কোনও বিকল্প নয়। সিএসএস হ'ল প্রসাধনীগুলির জন্য এবং এটি যখন বছরের পর বছর ধরে অনেক বেড়েছে এবং আপনি এই ধরণের সমস্যাগুলি সমাধান করতে এটি ব্যবহার করতে পারেন তবে সমাধানটি প্রসাধনী থেকে যায় এবং এটি অন্তর্নিহিত সমস্যার সমাধান করে না।
অ্যাডাম রেইস

118

এখানে আমার সংস্করণ, আইএমও এটি বোঝা সহজ এবং মার্জিতও।

var str = "foo bar baz"

console.log(

str.split(' ')
   .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
   .join(' ')

)
// returns "Foo Bar Baz"


3
বিকল্পভাবে, আপনি ম্যাপিংয়ে সাবস্ট্রিং ছোট করতে পারেন:str.split(' ').map(i => i[0].toUpperCase() + i.substring(1).toLowerCase()).join(' ')
ডেভ ল্যান্ড

5
আমি ফোন করার সাথে একমত নই .toLowerCase()। "ম্যাকডোনাল্ড" এর মতো নাম বা "ASAP" এর মতো সংক্ষিপ্ত নামগুলি তাদের বড় হাতের অক্ষর ধরে রাখতে হবে। যদি কেউ "হেল্লো" এর মতো স্ট্রিংয়ে আসলে পাস করে তবে অ্যাপ্লিকেশনটিকে বড় হাতের অক্ষরগুলি ভুল বলে ধরে নেওয়া উচিত নয়।
থমাস হিগগিনবোথাম

1
@ থমাস হিগগিনবোথম এই সম্পর্কে কীভাবে? String.prototype.toTitleCase = function (blnForceLower) { var strReturn; (blnForceLower ? strReturn = this.toLowerCase() : strReturn = this); return strReturn .split(' ') .map(i => i[0].toUpperCase() + i.substr(1)) .join(' '); }
শান ক্যান্ডেল 16

হ্যাঁ, ছোট হাতের চাপ দেওয়ার জন্য একটি বিকল্প সরবরাহ করা পছন্দ করা হবে।
টমাস হিগগিনবোথাম

1
এটি strএকটি একক চরিত্র হলে ভেঙে যাবে ।
ম্যাডব্রেকস

103

এখানে আমার ফাংশন যা শিরোনাম কেসে রূপান্তরিত করে তবে সংক্ষিপ্ত সংক্ষিপ্ত আকারকে বড় হাতের এবং ছোট শব্দগুলিকে ছোট হাতের মতো সংরক্ষণ করে:

String.prototype.toTitleCase = function() {
  var i, j, str, lowers, uppers;
  str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });

  // Certain minor words should be left lowercase unless 
  // they are the first or last words in the string
  lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At', 
  'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
  for (i = 0, j = lowers.length; i < j; i++)
    str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), 
      function(txt) {
        return txt.toLowerCase();
      });

  // Certain words such as initialisms or acronyms should be left uppercase
  uppers = ['Id', 'Tv'];
  for (i = 0, j = uppers.length; i < j; i++)
    str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'), 
      uppers[i].toUpperCase());

  return str;
}

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

"TO LOGIN TO THIS SITE and watch tv, please enter a valid id:".toTitleCase();
// Returns: "To Login to This Site and Watch TV, Please Enter a Valid ID:"

1
আমি আপনার পছন্দ করেছি, রোমান সংখ্যার সাথে কথা বলার সময়ও আমি সমস্যার মুখোমুখি হয়েছি ... কেবল এটি আমি, দ্বিতীয়, তৃতীয়, চতুর্থ, ইত্যাদির সাথে প্যাচ করেছি
মার্সেলো

2
সংশোধন করা হয়েছে। তৃতীয় লাইনে Regex থেকে পরিবর্তিত হয়েছে /\w\S*/gথেকে /([^\W_]+[^\s-]*) */gএই ঠিকানায় উপরে @ awashburn এর মন্তব্য প্রতি।
জেফ্রি বুথ

2
আপনার রেজেক্স প্যাটার্নটি ওভার দিয়ে কী লাভ করার সুবিধা রয়েছে /\b\w+/gযা আমি আরও দ্রুত বোধগম্য বলে মনে করি?
মাইকেল - ক্রে শিরকি

2
আমি দেখতে পাচ্ছি তা নয়, হাইফেনেটেড-শব্দের সমস্যাটি সমাধান করার জন্য আমি অন্য একজন মন্তব্যকারীর পরামর্শ গ্রহণ করছিলাম; তবে আপনার রেজেক্সটি ঠিক তেমনটিই করেছে বলে মনে হয় এবং সরলতা সর্বদা আরও ভাল। এই পোস্টে বংশধরগণ এবং ভবিষ্যতে দর্শকদের জন্য, আমি শুধু Regex তৃতীয় লাইনে থেকে পরিবর্তিত /([^\W_]+[^\s-]*) */gকরা /\b\w+/gপ্রতি @ মাইকেলের মন্তব্য; দয়া করে মন্তব্য করুন যদি আপনি এমন কোনও মামলা খুঁজে পান যেখানে আরও জটিল রেগেক্স প্রয়োজন।
জেফ্রি বুথ

1
/\b[\w-\']+/gহাইফেনেটেড শব্দের এবং শব্দগুলিতে অ্যাডোস্ট্রোফের অনুমতি দেওয়ার জন্য আমি তৃতীয় লাইনের রেজেক্সকে পরিবর্তন করেছি ।
শামাসিস ভট্টাচার্য

47

আমি অন্যান্য উত্তরের চেয়ে নীচে পছন্দ করি। এটি প্রতিটি শব্দের প্রথম অক্ষরের সাথে মেলে এবং এটিকে মূলধন করে। সহজ কোড, পড়তে সহজ এবং কম বাইট। এটি বিকৃত সংক্ষিপ্ত শব্দ প্রতিরোধ করতে বিদ্যমান মূল অক্ষর সংরক্ষণ করে। তবে আপনি সর্বদা toLowerCase()আপনার স্ট্রিংয়ে প্রথমে কল করতে পারেন ।

function title(str) {
  return str.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}

আপনি এটিকে আপনার স্ট্রিং প্রোটোটাইপে যুক্ত করতে পারেন যা আপনাকে 'my string'.toTitle()নিম্নলিখিত হিসাবে অনুমতি দেবে :

String.prototype.toTitle = function() {
  return this.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}

উদাহরণ:


3
এটি const titleCase = (str) => str.replace(/\b\S/g, t => t.toUpperCase());
ল্যাম্বদা

আমি আইই ভাঙতে চাইনি, তবে হ্যাঁ যদি অ্যাপ্লিকেশনটি লিগ্যাসি ব্রাউজারের সংবেদনশীল না হয় তবে এটি সংক্ষিপ্ত হতে পারে।
টম কে

এটি কেবল একটি আংশিক সমাধান - বিকল্পটি কীভাবে স্ট্রিংটিকে শিরোনাম ক্ষেত্রে রূপান্তর করতে পারে তার জন্য জানতে চেয়েছিলেন। এই উত্তরটি ইনপুটগুলির মতো পছন্দ করে না NoT qUiITe
ম্যাডব্রেকস

@ ম্যাডব্র্যাকস প্রশ্নটি মিশ্রিত কেস ইনপুটগুলিকে রূপান্তরিত করতে হবে তা স্থির করেনি। যাইহোক, আমি উত্তর উল্লেখ করার আপডেট করেছি toLowerCase। এটি সচেতন হতে হবে যে এটি সংক্ষিপ্ত শব্দটি ভেঙে দেবে। an HTML document: An HTML DocumentবনামAn Html Document
টম কে

4
@ ম্যাডব্র্যাকস আপনার প্রাথমিক উদাহরণটি স্বীকৃত হলেও আপনি ইনপুট মূলধন হয়ে থাকলে আউটপুট অপরিবর্তিত হবে বলে উল্লেখ করার পক্ষে একটি ভাল বক্তব্য রেখেছেন। যা বলা হচ্ছে, আমি বোধ করি উত্তরটি ঠিক তেমনই (প্রস্তাবিত সম্পাদনা দিয়ে toLowerCase) বিকাশকারীদের অভিপ্রায় অনুধাবনের চেয়ে আরও নমনীয় / কার্যকর। এই পদ্ধতিটি পিএইচপি ( ucwords) এবং গোলং ( strings.Title) এর মতো অন্যান্য ভাষার অনুরূপ অন্তর্নির্মিত পদ্ধতির কার্যকারিতাও প্রতিফলিত করে । .NET ( TextInfo.ToTitleCase) আকর্ষণীয়ভাবে মিশ্র কেসের ক্ষেত্রে কাজ করে তবে সম্পূর্ণরূপে মূলধনযুক্ত স্ট্রিংগুলি অপরিবর্তিত রেখে দেয়।
টম কে

20

শুধুমাত্র রেফারেন্সের জন্য রেজেেক্স ব্যবহার না করে:

String.prototype.toProperCase = function() {
  var words = this.split(' ');
  var results = [];
  for (var i = 0; i < words.length; i++) {
    var letter = words[i].charAt(0).toUpperCase();
    results.push(letter + words[i].slice(1));
  }
  return results.join(' ');
};

console.log(
  'john smith'.toProperCase()
)


রেজেক্স মুক্ত সমাধানের জন্য ধন্যবাদ!
লুসিফের 63

20

var result =
  'this is very interesting'.replace(/\b[a-z]/g, (x) => x.toUpperCase())

console.log(result) // This Is Very Interesting


কেবল একটি প্রশ্ন, () কনস্ট্রাক্ট হ'ল বিকল্পগুলির সিকোয়েন্সের যে কোনওটিতে একটি ম্যাচ নির্দিষ্ট করার জন্য: যা (a | b) একটি বা বি এর সাথে মেলে। নির্মাণ (।) কী করে?
মাইকেল ব্ল্যাকবার্ন

যার যার একই প্রশ্ন ছিল, এটি একটি প্রতিস্থাপন "ব্লব" সংজ্ঞায়িত করে যা প্রতিস্থাপন বিভাগে ব্যবহৃত হয়। ব্লবগুলি ধারাবাহিকভাবে গণনা করা হয়, প্রথম () 1 ডলারে রাখা হয়, দ্বিতীয়টি $ 2 এ স্থাপন করা হয়। আমি এই সাইটটি দরকারী বলে খুঁজে পেয়েছি: javascript.info/tutorial/regular-expressions-usthods
মাইকেল ব্ল্যাকবার্ন

আমি উপরের কাজ করতে সক্ষম নই, তবে আমি একটি রেজেক্স উইজার্ড থেকে অনেক দূরে। আমি 'string'.replace(/^(.)(.*)/,function(s,p1,p2){return p1.toUpperCase()+p2;}) আবার ব্যবহার করছি , এটি কেবল একটি স্ট্রিংয়ের প্রথম অক্ষরকে মূলধনের জন্য কাজ করে, তবে এটির ক্ষেত্রে আপনার নির্মাণ কাজ করে।
মাইকেল ব্ল্যাকবার্ন

1
কোনও কারণে এফএফ 35 টি মনে '$1'.toUpperCase()হচ্ছে, মনে হচ্ছে বড় হ'ল সময়টি বড় হবার সাথে সাথে করা হয়নি done ফাংশনটি ব্যবহার করে চারপাশে কাজ করেছেন'string'.replace(/^(.){1}/,function(match) { return match.toUpperCase(); })
মিঃইলো

হাই সব, উত্তর স্থির! আমি নিশ্চিত যে এটি শুরুতে পোস্ট করার সময়কালে এটি কাজ করছে pretty যাইহোক ইনপুট জন্য ধন্যবাদ!
সিমো

17

আপনি সঙ্গে সঙ্গে toLowerCaseস্ট্রিং করতে পারেন, এবং তারপরে toUpperCaseপ্রতিটি শব্দের প্রথম অক্ষর। খুব সাধারণ 1 লাইনারে পরিণত হয়:

function titleCase(str) {
  return str.toLowerCase().replace(/\b(\w)/g, s => s.toUpperCase());
}

console.log(titleCase('iron man'));
console.log(titleCase('iNcrEdible hulK'));


আমি এই সমাধান পছন্দ করি; সুন্দর এবং সহজ দেখে মনে হচ্ছে কিছুটা কফিস্ক্রিপ্ট যদিও আপনার উত্তরে পিছলে গেছে ( s => s.toUpperCase())। আমার রূপটি হ'ল আপনি যা করেছেন তা করা, তবে স্ট্রিং অবজেক্টটি প্রসারিত করা (যেমনটি বিতর্কিত):Object.defineProperty(String.prototype, '_toProperCase', {value:function() {return this.toLowerCase().replace(/\b(\w)/g, function(t) {return t.toUpperCase()})}})
ওয়াজ

1
@ ওয়াজ, ধারণার জন্য ধন্যবাদ! কেবল =>এটিই একটি স্পষ্ট করে বলতে চেয়েছিলেন , এটি একটি নেটিভ তীর ফাংশন (ES6), লিঙ্কটি তাদের উপরের মজিল্লা ডক্সে ঝাঁপ দেয় যা একটি সমর্থন সারণীও সরবরাহ করে।
কেভবট

16

আপনি যদি এই ফিলার শব্দগুলি সম্পর্কে উদ্বিগ্ন থাকেন তবে আপনি সর্বদা কেবল কী কার্যকরী করবেন না তা ফাংশনটি বলতে পারবেন।

/**
 * @param String str The text to be converted to titleCase.
 * @param Array glue the words to leave in lowercase. 
 */
var titleCase = function(str, glue){
    glue = (glue) ? glue : ['of', 'for', 'and'];
    return str.replace(/(\w)(\w*)/g, function(_, i, r){
        var j = i.toUpperCase() + (r != null ? r : "");
        return (glue.indexOf(j.toLowerCase())<0)?j:j.toLowerCase();
    });
};

আশা করি এটি আপনাকে সাহায্য করবে।

সম্পাদন করা

আপনি যদি শীর্ষস্থানীয় আঠালো শব্দগুলি পরিচালনা করতে চান তবে আপনি এই ডাব্লু / এক আরও পরিবর্তনশীলটির ট্র্যাক রাখতে পারেন:

var titleCase = function(str, glue){
    glue = !!glue ? glue : ['of', 'for', 'and', 'a'];
    var first = true;
    return str.replace(/(\w)(\w*)/g, function(_, i, r) {
        var j = i.toUpperCase() + (r != null ? r : '').toLowerCase();
        var result = ((glue.indexOf(j.toLowerCase()) < 0) || first) ? j : j.toLowerCase();
        first = false;
        return result;
    });
};

2
আপনি একটি অ্যারের মধ্যে একটি স্ট্রিং বিস্ফোরিত করতে পারেন। সুতরাং আমরা পর্তুগিজ, স্পেনীয়, ইতালিয়ান এবং ফরাসি প্রস্তুতি পেতে পারি:glue ='de|da|del|dos|do|das|des|la|della|delli'.split('|');
জুনিয়র মেহে

এটি প্রথম শব্দের মূলধন নিশ্চিত করবে না; অর্থাত্ and another thingহয়ে ওঠে and Another Thing। সর্বদা প্রথম শব্দটিকে মূলধন করতে কেবল একটি মার্জিত উপায় প্রয়োজন।
ব্র্যাড কোচ

@ ব্র্যাডকোচ - ফাঁকা জায়গাগুলি যাতে আপনি অনুসন্ধান শব্দ হিসাবে 'এবং', 'ডি', ইত্যাদি ব্যবহার করছেন, তারপরে 'এবং আরেকটি এবং অন্য' এর পরিবর্তে 'এবং অন্য এবং অন্যটি' নিয়ে যাবে।
ইয়িমিন রং

ভাল ছাড়া এটি 'এবং' এর পরে পাঠ্যকেও বড় করে তোলে যেমন হ'ডা বা নম্বর-ও
লুকি

টর্নারি অপারেটর ব্যবহার না করে আপনি কেবল ফ্যালব্যাক ব্যবহার করতে পারেন: আঠালো = আঠালো || ['এর', 'ফর', 'এবং', 'এ'];
tm2josep

14

যদি উপরের সমাধানগুলিতে ব্যবহৃত রেজেক্স আপনাকে বিভ্রান্ত করছে, এই কোডটি ব্যবহার করে দেখুন:

function titleCase(str) {
  return str.split(' ').map(function(val){ 
    return val.charAt(0).toUpperCase() + val.substr(1).toLowerCase();
  }).join(' ');
}

এটা ভালবাসা! অ্যারেতে কোনও রূপান্তর নেই।
নীলমেগ

1
uhhh ... split নেই এটা একটি অ্যারের রূপান্তর, আপনি শুধু এটা যেমন স্পষ্টত দেখতে না কারণ mapমানে কি ব্যবহার করতে হবে না []স্বরলিপি
MalcolmOcean

2
এটি 2 বছর আগে থেকে a8m এর উত্তর হিসাবে একই ।
মাইকেল - ক্লে শিরকি কোথায়

1
একক-চর ইনপুট জন্য বিরতি।
ম্যাডব্রেকস

1
@ অ্যালেক্স চ্যাফি পুনর্বিবেচনার ইতিহাসটি পরীক্ষা করে দেখুন। a8m আসল উত্তরে একটি তীর ফাংশন ব্যবহার করেনি।
আপনাকে ধন্যবাদ

9

আমি এই ফাংশনটি তৈরি করেছি যা সর্বশেষ নামগুলি হ্যান্ডেল করতে পারে (সুতরাং এটি শিরোনামের ক্ষেত্রে নয়) যেমন "ম্যাকডোনাল্ড" বা "ম্যাকডোনাল্ড" বা "ও'টুল" বা "ডি'রোজিও"। তবে এটি "ভ্যান" বা "ভন" দিয়ে জার্মান বা ডাচ নামগুলি পরিচালনা করে না যা প্রায়শই নিম্ন-ক্ষেত্রে হয় ... আমি বিশ্বাস করি "ডি" প্রায়শই নিম্ন-ক্ষেত্রে যেমন "রবার্ট ডি নিরো"। এগুলি এখনও সমাধান করতে হবে।

function toProperCase(s)
{
  return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
          function($1, $2, $3, $4, $5) { if($2){return $3.toUpperCase()+$4+$5.toUpperCase();} return $1.toUpperCase(); });
}

1
নাম সচেতনতার জন্য +1। যদিও "ম্যাকি" সঠিকভাবে পরিচালনা করে না।
ব্রায়ানারি

এটিই কেবলমাত্র একটি ফাংশন যা বড় হাতের অক্ষর এবং লোয়ার কেসকে সঠিক ক্ষেত্রে সঠিকভাবে পরিচালনা করে এবং "ইউএস ভার্জিন দ্বীপপুঞ্জ" এর মতো আদ্যক্ষর লক্ষ করা যায়।
রডরিগো পোলো

আপনি দেখতে পারেন macyসেখানে একটি নেতিবাচক lookahead নির্বাণ দ্বারা আপনি সমস্যা তাই \b((m)(a?c))?(\w)হয়ে\b((m)(a?c))?(\w)(?!\s)
এর মধ্যে Ste

8
var toMatch = "john w. smith";
var result = toMatch.replace(/(\w)(\w*)/g, function (_, i, r) {
      return i.toUpperCase() + (r != null ? r : "");
    }
)

কাজটি দেখে মনে হচ্ছে ... উপরের সাথে পরীক্ষিত, "দ্রুত-বাদামী, শিয়াল? / লাফিয়ে / ^ ওভার ^ দ্য অলস! কুকুর ..." এবং "সি: / প্রোগ্রাম ফাইল / কিছু বিক্রেতার / তাদের দ্বিতীয় অ্যাপ্লিকেশন / এ file1.txt "।

আপনি যদি 2 য় পরিবর্তে 2Nd চান, আপনি এতে পরিবর্তন করতে পারেন /([a-z])(\w*)/g

প্রথম ফর্মটি হিসাবে সরলীকৃত করা যেতে পারে:

function toTitleCase(toTransform) {
  return toTransform.replace(/\b([a-z])/g, function (_, initial) {
      return initial.toUpperCase();
  });
}

7

এটা চেষ্টা কর

String.prototype.toProperCase = function(){
    return this.toLowerCase().replace(/(^[a-z]| [a-z]|-[a-z])/g, 
        function($1){
            return $1.toUpperCase();
        }
    );
};

উদাহরণ

var str = 'john smith';
str.toProperCase();

7

স্বল্পতম উপায়টি চেষ্টা করে দেখুন:

str.replace(/(^[a-z])|(\s+[a-z])/g, txt => txt.toUpperCase());

7

ES 6

str.split(' ')
   .map(s => s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase())
   .join(' ')

আর

str.split(' ').map(function (s) {
    return s.slice(0, 1).toUpperCase() + s.slice(1).toLowerCase();
}).join(' ')

s.slice(0, 1).toUpperCase()যদি আপনি এখনও প্রথম চিঠিটি চান তবে সম্ভবত একটি মাথা উঁচু করা উচিত ।
উইন্ডসফটাইম

@ jssridhar আপনারও ES6 কোডটি সংশোধন করা উচিত।
caiosm1005

1
strএকক চরিত্র হলে বিরতি
ম্যাডব্রেকস

@ jssridhar আমাদের পক্ষে আরও ভাল হতে পারে .charAt(0).toUpperCase()
রোয়ডুকি

2
a8m এর উত্তরের সদৃশ
আপনাকে ধন্যবাদ

6

এই উত্তরগুলির মধ্যে বেশিরভাগই সীমানা মেটাচার্যাক্টর (\ বি) শব্দটি ব্যবহার করার সম্ভাবনাটিকে উপেক্ষা করে বলে মনে হচ্ছে। এটি ব্যবহার করে গ্রেগ ডিনের উত্তরের একটি সংক্ষিপ্ত সংস্করণ:

function toTitleCase(str)
{
    return str.replace(/\b\w/g, function (txt) { return txt.toUpperCase(); });
}

জিম-বব এর মতো হাইফেনেটেড নামের জন্য কাজ করে।


2
একটি মার্জিত আংশিক সমাধান তবে অ্যাকসেন্ট বা আপার কেস স্ট্রিংগুলির সাথে কাজ করে না। আমি "সোফিয়া ভার্গারা" => "সোফিয়া ভার্গারা" বা "সোফিয়া ভার্গারা" => "সোফিয়া ভার্গারা" পেয়েছি। দ্বিতীয় কেসটি .replace (...) এর আগে .toLowerCase () ফাংশন প্রয়োগ করে সমাধান করা যায়। প্রথম ক্ষেত্রে একটি সঠিক নিয়মিত ভাব প্রকাশ করা প্রয়োজন।
অ্যাসেরওয়্যার

2
হুম, এটি রিজেক্স বাস্তবায়নের বাগের মতো মনে হচ্ছে, আমি মনে করব উচ্চারণযুক্ত অক্ষরগুলি শব্দের অক্ষর হওয়া উচিত (আপনি সঠিক হলেও, এই ক্ষেত্রে এটি কার্যকর হয় না)।
lewax00

\wশুধুমাত্র অক্ষর অন্তর্ভুক্ত [A-Za-z0-9_], সমস্ত অক্ষর। তার জন্য আপনার ইউনিকোড বিভাগটি ব্যবহার করা দরকার \p{L}। আপনার /uসংশোধক ( এখানে দেখুন ) এবং এর জন্য আলাদা সমাধান দরকার \bযা কেবলমাত্র \Wএবং \w( এখানে দেখুন ) এর মধ্যে কাজ করে
সিএমবুকলি

6

আপনি যদি আপনার কোডটিতে তৃতীয় পক্ষের লাইব্রেরিগুলি ব্যবহার করতে পারেন তবে লডাশের আমাদের জন্য একটি সহায়ক ফাংশন রয়েছে।

https://lodash.com/docs/4.17.3#startCase

_.startCase('foo bar');
// => 'Foo Bar'

_.startCase('--foo-bar--');
// => 'Foo Bar'
 
_.startCase('fooBar');
// => 'Foo Bar'
 
_.startCase('__FOO_BAR__');
// => 'FOO BAR'


6

আমি মনে করি সবচেয়ে সহজ সিএসএস ব্যবহার করছে।

function format_str(str) {
    str = str.toLowerCase();
    return '<span style="text-transform: capitalize">'+ str +'</span>';
}

আমি কোডটি আপডেট করেছি এবং এটি পরীক্ষা করেছি। এটি এখন কাজ করা উচিত।
বিস্মিত

আপনি কেবল জেএস ব্যবহার করা পরিবেশের একটি ভগ্নাংশে সিএসএস ব্যবহার করতে পারেন, সুতরাং এই সমাধানটি কার্যকর নয়। এছাড়াও ইনলাইন শৈলীগুলি যে কোনও মূল্যে এড়ানো উচিত।
ম্যাডব্রেকস

5

/\S+/gডায়াক্রিটিক্সকে সমর্থন করার জন্য ব্যবহার করুন :

function toTitleCase(str) {
  return str.replace(/\S+/g, str => str.charAt(0).toUpperCase() + str.substr(1).toLowerCase());
}

console.log(toTitleCase("a city named örebro")); // A City Named Örebro

তবে: " s আনশাইন ( ওয়াই এলো)" ⇒ " এস আনশাইন ( ওয়াই ইলো)"


5

আমি এখানে নিজের উত্তর যুক্ত করতে চেয়েছিলাম কারণ এখানে একটি শক্তিশালী toTitleCaseফাংশন দরকার যা এখানে তালিকাভুক্ত ব্যাকরণের নিয়মগুলিকে বিবেচনা করে (গুগল প্রস্তাবিত নিবন্ধ) বিভিন্ন বিধি রয়েছে যা ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের উপর নির্ভর করে। নীচে ফাংশন + ইউনিট পরীক্ষা রয়েছে।

ফাংশনটি হোয়াইটস্পেসকে একীভূত করে এবং বিশেষ অক্ষরগুলি সরিয়ে দেয় (আপনার প্রয়োজনের জন্য রেজেক্স সংশোধন করুন)

টাইটেলকেস ফাংশন

const toTitleCase = (str) => {
  const articles = ['a', 'an', 'the'];
  const conjunctions = ['for', 'and', 'nor', 'but', 'or', 'yet', 'so'];
  const prepositions = [
    'with', 'at', 'from', 'into','upon', 'of', 'to', 'in', 'for',
    'on', 'by', 'like', 'over', 'plus', 'but', 'up', 'down', 'off', 'near'
  ];

  // The list of spacial characters can be tweaked here
  const replaceCharsWithSpace = (str) => str.replace(/[^0-9a-z&/\\]/gi, ' ').replace(/(\s\s+)/gi, ' ');
  const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.substr(1);
  const normalizeStr = (str) => str.toLowerCase().trim();
  const shouldCapitalize = (word, fullWordList, posWithinStr) => {
    if ((posWithinStr == 0) || (posWithinStr == fullWordList.length - 1)) {
      return true;
    }

    return !(articles.includes(word) || conjunctions.includes(word) || prepositions.includes(word));
  }

  str = replaceCharsWithSpace(str);
  str = normalizeStr(str);

  let words = str.split(' ');
  if (words.length <= 2) { // Strings less than 3 words long should always have first words capitalized
    words = words.map(w => capitalizeFirstLetter(w));
  }
  else {
    for (let i = 0; i < words.length; i++) {
      words[i] = (shouldCapitalize(words[i], words, i) ? capitalizeFirstLetter(words[i], words, i) : words[i]);
    }
  }

  return words.join(' ');
}

সঠিকতা নিশ্চিত করার জন্য ইউনিট টেস্ট

import { expect } from 'chai';
import { toTitleCase } from '../../src/lib/stringHelper';

describe('toTitleCase', () => {
  it('Capitalizes first letter of each word irrespective of articles, conjunctions or prepositions if string is no greater than two words long', function(){
    expect(toTitleCase('the dog')).to.equal('The Dog'); // Capitalize articles when only two words long
    expect(toTitleCase('for all')).to.equal('For All'); // Capitalize conjunctions when only two words long
    expect(toTitleCase('with cats')).to.equal('With Cats'); // Capitalize prepositions when only two words long
  });

  it('Always capitalize first and last words in a string irrespective of articles, conjunctions or prepositions', function(){
    expect(toTitleCase('the beautiful dog')).to.equal('The Beautiful Dog');
    expect(toTitleCase('for all the deadly ninjas, be it so')).to.equal('For All the Deadly Ninjas Be It So');
    expect(toTitleCase('with cats and dogs we are near')).to.equal('With Cats and Dogs We Are Near');
  });

  it('Replace special characters with space', function(){
    expect(toTitleCase('[wolves & lions]: be careful')).to.equal('Wolves & Lions Be Careful');
    expect(toTitleCase('wolves & lions, be careful')).to.equal('Wolves & Lions Be Careful');
  });

  it('Trim whitespace at beginning and end', function(){
    expect(toTitleCase(' mario & Luigi superstar saga ')).to.equal('Mario & Luigi Superstar Saga');
  });

  it('articles, conjunctions and prepositions should not be capitalized in strings of 3+ words', function(){
    expect(toTitleCase('The wolf and the lion: a tale of two like animals')).to.equal('The Wolf and the Lion a Tale of Two like Animals');
    expect(toTitleCase('the  three Musketeers  And plus ')).to.equal('The Three Musketeers and Plus');
  });
});

দয়া করে নোট করুন যে আমি সরবরাহ করা স্ট্রিংগুলি থেকে বেশ কয়েকটি বিশেষ অক্ষর মুছে ফেলছি। আপনার প্রকল্পের প্রয়োজনীয়তাগুলি সমাধান করার জন্য আপনাকে রেইজেক্সটিকে টুইঙ্ক করতে হবে।


আমি এই সমাধানটিকে অগ্রাধিকার দিচ্ছি কারণ এটি সত্যই শিরোনামের ক্ষেত্রে যত্ন নেয়। এটি "দ্যা উইন্ড দ্য উইন্ড" নয় এটি "দ্য উইন্ড উইন্ড দ্য উইন্ড"
রাসেলম্যানিয়া

5
"john f. kennedy".replace(/\b\S/g, t => t.toUpperCase())

1
নমুনার জন্য কাজ করে এবং o'henry, তবে অদ্ভুত স্টাফ দিয়ে horse's mouth
মাইকেল - ক্লে শিরকি

"john f. kennEdy".toLowerCase().replace(/\b\S/g, t => t.toUpperCase())ভাল 🤔
ডাব্লু

@ প্রক্সিমোর উত্তরটি সম্পাদনা করতে চান নি: এবং \bএবং " অক্ষরের সীমানা" এবং "একক, অ-সাদা স্থানের অক্ষর " বোঝানোর \Sজন্য বিশেষ চরিত্রের ক্লাস রয়েছে । সুতরাং, রেজেক্স শব্দের সীমা অনুসরণ করে প্রতিটি একক অক্ষরের সাথে মেলে এবং প্রদত্ত তীর ফাংশনটি প্রয়োগ করে সেই চরিত্রটিকে মূলধন করে।
জেনস

4

"লেওয়াক্স০০" সমাধানটি গ্রহণ করে আমি এই সহজ সমাধানটি তৈরি করেছিলাম যা "ডাব্লু" এর সাথে স্পেস দিয়ে শুরু করতে বাধ্য হয় বা "ডাব্লু" যা ডি শব্দটি শুরু করে, তবে অতিরিক্ত মধ্যবর্তী স্থানগুলি সরাতে সক্ষম হয় না।

"SOFÍA vergara".toLowerCase().replace(/\b(\s\w|^\w)/g, function (txt) { return txt.toUpperCase(); });

ফলাফল "সোফিয়া ভার্গারা"।


4

এখানে আমার ফাংশনটি উচ্চারণযুক্ত অক্ষরগুলির যত্ন নিচ্ছে (ফরাসিদের জন্য গুরুত্বপূর্ণ!) এবং এটি নিম্নতর ব্যতিক্রমগুলি পরিচালনা করতে বা বন্ধ করতে পারে। আশা করি এইটি কাজ করবে.

String.prototype.titlecase = function(lang, withLowers = false) {
    var i, string, lowers, uppers;

    string = this.replace(/([^\s:\-'])([^\s:\-']*)/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    }).replace(/Mc(.)/g, function(match, next) {
        return 'Mc' + next.toUpperCase();
    });

    if (withLowers) {
        if (lang == 'EN') {
            lowers = ['A', 'An', 'The', 'At', 'By', 'For', 'In', 'Of', 'On', 'To', 'Up', 'And', 'As', 'But', 'Or', 'Nor', 'Not'];
        }
        else {
            lowers = ['Un', 'Une', 'Le', 'La', 'Les', 'Du', 'De', 'Des', 'À', 'Au', 'Aux', 'Par', 'Pour', 'Dans', 'Sur', 'Et', 'Comme', 'Mais', 'Ou', 'Où', 'Ne', 'Ni', 'Pas'];
        }
        for (i = 0; i < lowers.length; i++) {
            string = string.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'), function(txt) {
                return txt.toLowerCase();
            });
        }
    }

    uppers = ['Id', 'R&d'];
    for (i = 0; i < uppers.length; i++) {
        string = string.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'), uppers[i].toUpperCase());
    }

    return string;
}

4

অফিসে আমরা এখানে আবার আলোচনা করেছি এবং আমরা মনে করি যে বর্তমান সময়ে আপনি যেভাবে লোকেরা নাম চান তা ইনপুটটি স্বয়ংক্রিয়ভাবে সংশোধন করার চেষ্টা করা সম্ভব সমস্যাগুলি দ্বারা পরিপূর্ণ।

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

প্রতিটি নামের প্রথম অক্ষর মূলধন সহ সমস্যাগুলি:

I আইবিএম এর মতো সংক্ষিপ্ত নামগুলি ইনপুট করার অনুমতি নেই, ইবামে পরিণত হবে।

Mc নাম ম্যাকডোনাল্ড ম্যাকডোনাল্ডে পরিণত হবে যা ভুল, একই জিনিস ম্যাকডোনাল্ডও।

Mar মেরি-টঙ্কসের মতো ডাবল ব্যারেলড নামগুলি ম্যারি-টঙ্কে পরিণত হবে।

O ও'কনোরের মতো নামগুলি ওকনোনারে পরিণত হবে।

এর বেশিরভাগের জন্য আপনি এটি মোকাবেলার জন্য কাস্টম বিধিগুলি লিখতে পারেন, তবে, এরপরেও এর আগেরটির মতো একটি্রোনামগুলির সাথে সমস্যা রয়েছে এবং আপনি একটি নতুন সমস্যা পেয়েছেন:

Mac ম্যাকডোনাল্ডের মতো ম্যাকের সাথে নামগুলি সংশোধন করার নিয়মে যুক্ত করা, ম্যাসি যেমন ম্যাকিটিকে ম্যাকওয়াইতে রূপান্তরিত করে এমন নামকরণ করবে।

আমরা যে সমাধানটি নিয়ে এসেছি তা কখনই ভুল নয়, এটি হ'ল একটি অক্ষরকে মূলধন করে যা ডিবিএসও ব্যবহার করে বলে মনে হয় b

সুতরাং আপনি যদি প্রক্রিয়াটি স্বয়ংক্রিয় করতে চান তবে প্রতিটি একক নাম এবং শব্দের একটি অভিধান ছাড়া এটি করা যেমন অসম্ভব তত ভাল এবং কীভাবে এটি শিরোনাম করা উচিত, যদি আপনার কাছে এমন কোনও নিয়ম না থাকে যা সমস্ত কিছু কভার করে এটি এটি ব্যবহার না করে কেবলমাত্র আপনার ব্যবহারকারীদের বিরক্ত করবেন এবং তাদের নামগুলি সঠিকভাবে প্রবেশ করতে চান এমন লোকদের অন্য কোনও জায়গায় যেতে অনুরোধ করবেন।


4

সিএসএস ব্যবহার করে (এবং জাভাস্ক্রিপ্ট, আপনি যে পাঠ্যটি রূপান্তর করতে চান তা যদি বড় হাতের অক্ষরে থাকে তবে) এখানে আরও একটি সমাধান রয়েছে:

এইচটিএমএল

<span id='text'>JOHN SMITH</span>

JS

var str = document.getElementById('text').innerHtml;
var return_text = str.toLowerCase();

CSS

#text{text-transform:capitalize;}

3

আমাদের মধ্যে যারা নিয়মিত ভাব (ভিজি) থেকে ভয় পান:

function titleCase(str)
{
    var words = str.split(" ");
    for ( var i = 0; i < words.length; i++ )
    {
        var j = words[i].charAt(0).toUpperCase();
        words[i] = j + words[i].substr(1);
    }
    return words.join(" ");
}


3

আমার এক লাইনের সমাধান:

String.prototype.capitalizeWords = function() {
    return this.split(" ").map(function(ele){ return ele[0].toUpperCase() + ele.slice(1).toLowerCase();}).join(" ");
};

তারপরে, আপনি যে capitalizeWords()কোনও স্ট্রিংয়ে পদ্ধতিটি কল করতে পারেন । উদাহরণ স্বরূপ:

var myS = "this actually works!";
myS.capitalizeWords();

>>> This Actually Works

আমার অন্যান্য সমাধান:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeAllWords = function() {
    var arr = this.split(" ");
    for(var i = 0; i < arr.length; i++) {
        arr[i] = capitalizeFirstLetter(arr[i]);
    }
    return arr.join(" ");
};

তারপরে, আপনি যে capitalizeWords()কোনও স্ট্রিংয়ে পদ্ধতিটি কল করতে পারেন । উদাহরণ স্বরূপ:

var myStr = "this one works too!";
myStr.capitalizeWords();

>>> This One Works Too

গ্রেগ ডিন উত্তরের ভিত্তিতে বিকল্প সমাধান:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeWords = function() {
    return this.replace(/\w\S*/g, capitalizeFirstLetter);
};

তারপরে, আপনি যে capitalizeWords()কোনও স্ট্রিংয়ে পদ্ধতিটি কল করতে পারেন । উদাহরণ স্বরূপ:

var myString = "yes and no";
myString.capitalizeWords()

>>> Yes And No

3

অবাক হয়ে অবাক হয়ে কেউ প্যারামিটার ব্যবহারের কথা উল্লেখ করেনি। এখানে একটি সাধারণ একটি লাইনার যা ES6 রেস্ট পরামিতি ব্যবহার করে।

let str="john smith"
str=str.split(" ").map(([firstChar,...rest])=>firstChar.toUpperCase()+rest.join("").toLowerCase()).join(" ")
console.log(str)


2

এটি ফ্রিকোডক্যাম্পের বনফায়ার "শিরোনাম কেস" এর জন্য আমার সমাধানের ভিত্তিতে তৈরি করা হয়েছে , যার জন্য আপনাকে প্রথমে প্রদত্ত স্ট্রিংটিকে সমস্ত লোয়ার কেসে রূপান্তর করতে হবে এবং তারপরে প্রতিটি চরিত্রকে স্থানের দিকে নিয়ে যাওয়া উপরের ক্ষেত্রে রূপান্তর করতে হবে।

রিজেক্স ব্যবহার না করে:

function titleCase(str) {
 return str.toLowerCase().split(' ').map(function(val) { return val.replace(val[0], val[0].toUpperCase()); }).join(' ');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.