কোনও স্ট্রিংকে শিরোনামের ক্ষেত্রে রূপান্তর করার কোনও সহজ উপায় আছে? যেমন john smith
হয়ে যায় John Smith
। আমি জন রেসিগের সমাধানের মতো জটিল কিছু খুঁজছি না , কেবল (আশাবাদী) এক ধরণের এক-বা দুই-লাইনার।
কোনও স্ট্রিংকে শিরোনামের ক্ষেত্রে রূপান্তর করার কোনও সহজ উপায় আছে? যেমন john smith
হয়ে যায় John Smith
। আমি জন রেসিগের সমাধানের মতো জটিল কিছু খুঁজছি না , কেবল (আশাবাদী) এক ধরণের এক-বা দুই-লাইনার।
উত্তর:
এটা চেষ্টা কর:
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>
\w\S*
পরিবর্তে \w+
বা \w*
উদাহরণস্বরূপ কেন ব্যবহৃত হয় ? আমি জানি না কেন তুমি কিছুই কিন্তু শূণ্যস্থান অন্তর্ভুক্ত এবং সেইজন্য পরিবর্তন করতে চাইবেন না জিম-বব থেকে জিম-বব ।
\w\S*
এছাড়াও সৃষ্ট Jim-bob
আমাদের প্রান্তে সমস্যা। এটি \w*
সমাধান করে ।
/([^\W_]+[^\s-]*) */g
সমস্যার সমাধান করে Jim-Bob
, যেমন:jim-bob
-->
Jim-Bob
jim-bob
-->
Jim-Bob
আপনার ইচ্ছা হয়, আপনার সম্ভবত করা উচিত /\b\w+/g
। উদাহরণ:str.replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();});
\w\S*
এর পরিবর্তে \w+
বা \w*
তাই ব্যবহৃত হয় যাতে শব্দগুলি Don't
পরিবর্তিত হয় না Don'T
, তবে অন্যরা \w\S*
হাইফেনেটেড শব্দের কারণে সমস্যাগুলির কারণ দেখায় ।
গ্রেগ ডিনের কার্যকারিতাটি গ্রহণ করে কিছুটা মার্জিত উপায়:
String.prototype.toProperCase = function () {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};
এটিকে কল করুন:
"pascal".toProperCase();
Jo-Ann Smith
, এই কোড তাদের রূপান্তর হবে Jo-ann Smith
(ছোট হাতের অক্ষর ব্যবহার করে নোট a
মধ্যে Ann
)।
আপনার নিয়ন্ত্রণগুলিতে পাঠ্য-রূপান্তরকারী CSS স্টাইল প্রয়োগ করার চেষ্টা করুন ।
উদাহরণ: (text-transform: capitalize);
যখন একেবারে প্রয়োজন হয় তখনই জেএস পদ্ধতির ব্যবহার করুন।
এখানে আমার সংস্করণ, আইএমও এটি বোঝা সহজ এবং মার্জিতও।
var str = "foo bar baz"
console.log(
str.split(' ')
.map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
.join(' ')
)
// returns "Foo Bar Baz"
str.split(' ').map(i => i[0].toUpperCase() + i.substring(1).toLowerCase()).join(' ')
.toLowerCase()
। "ম্যাকডোনাল্ড" এর মতো নাম বা "ASAP" এর মতো সংক্ষিপ্ত নামগুলি তাদের বড় হাতের অক্ষর ধরে রাখতে হবে। যদি কেউ "হেল্লো" এর মতো স্ট্রিংয়ে আসলে পাস করে তবে অ্যাপ্লিকেশনটিকে বড় হাতের অক্ষরগুলি ভুল বলে ধরে নেওয়া উচিত নয়।
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(' '); }
str
একটি একক চরিত্র হলে ভেঙে যাবে ।
এখানে আমার ফাংশন যা শিরোনাম কেসে রূপান্তরিত করে তবে সংক্ষিপ্ত সংক্ষিপ্ত আকারকে বড় হাতের এবং ছোট শব্দগুলিকে ছোট হাতের মতো সংরক্ষণ করে:
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:"
/\w\S*/g
থেকে /([^\W_]+[^\s-]*) */g
এই ঠিকানায় উপরে @ awashburn এর মন্তব্য প্রতি।
/\b\w+/g
যা আমি আরও দ্রুত বোধগম্য বলে মনে করি?
/([^\W_]+[^\s-]*) */g
করা /\b\w+/g
প্রতি @ মাইকেলের মন্তব্য; দয়া করে মন্তব্য করুন যদি আপনি এমন কোনও মামলা খুঁজে পান যেখানে আরও জটিল রেগেক্স প্রয়োজন।
/\b[\w-\']+/g
হাইফেনেটেড শব্দের এবং শব্দগুলিতে অ্যাডোস্ট্রোফের অনুমতি দেওয়ার জন্য আমি তৃতীয় লাইনের রেজেক্সকে পরিবর্তন করেছি ।
আমি অন্যান্য উত্তরের চেয়ে নীচে পছন্দ করি। এটি প্রতিটি শব্দের প্রথম অক্ষরের সাথে মেলে এবং এটিকে মূলধন করে। সহজ কোড, পড়তে সহজ এবং কম বাইট। এটি বিকৃত সংক্ষিপ্ত শব্দ প্রতিরোধ করতে বিদ্যমান মূল অক্ষর সংরক্ষণ করে। তবে আপনি সর্বদা 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() });
}
উদাহরণ:
const titleCase = (str) => str.replace(/\b\S/g, t => t.toUpperCase());
NoT qUiITe
।
toLowerCase
। এটি সচেতন হতে হবে যে এটি সংক্ষিপ্ত শব্দটি ভেঙে দেবে। an HTML document
: An HTML Document
বনামAn Html Document
toLowerCase
) বিকাশকারীদের অভিপ্রায় অনুধাবনের চেয়ে আরও নমনীয় / কার্যকর। এই পদ্ধতিটি পিএইচপি ( ucwords
) এবং গোলং ( strings.Title
) এর মতো অন্যান্য ভাষার অনুরূপ অন্তর্নির্মিত পদ্ধতির কার্যকারিতাও প্রতিফলিত করে । .NET ( TextInfo.ToTitleCase
) আকর্ষণীয়ভাবে মিশ্র কেসের ক্ষেত্রে কাজ করে তবে সম্পূর্ণরূপে মূলধনযুক্ত স্ট্রিংগুলি অপরিবর্তিত রেখে দেয়।
শুধুমাত্র রেফারেন্সের জন্য রেজেেক্স ব্যবহার না করে:
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()
)
var result =
'this is very interesting'.replace(/\b[a-z]/g, (x) => x.toUpperCase())
console.log(result) // This Is Very Interesting
'string'.replace(/^(.)(.*)/,function(s,p1,p2){return p1.toUpperCase()+p2;})
আবার ব্যবহার করছি , এটি কেবল একটি স্ট্রিংয়ের প্রথম অক্ষরকে মূলধনের জন্য কাজ করে, তবে এটির ক্ষেত্রে আপনার নির্মাণ কাজ করে।
'$1'.toUpperCase()
হচ্ছে, মনে হচ্ছে বড় হ'ল সময়টি বড় হবার সাথে সাথে করা হয়নি done ফাংশনটি ব্যবহার করে চারপাশে কাজ করেছেন'string'.replace(/^(.){1}/,function(match) { return match.toUpperCase(); })
আপনি সঙ্গে সঙ্গে 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()})}})
=>
এটিই একটি স্পষ্ট করে বলতে চেয়েছিলেন , এটি একটি নেটিভ তীর ফাংশন (ES6), লিঙ্কটি তাদের উপরের মজিল্লা ডক্সে ঝাঁপ দেয় যা একটি সমর্থন সারণীও সরবরাহ করে।
আপনি যদি এই ফিলার শব্দগুলি সম্পর্কে উদ্বিগ্ন থাকেন তবে আপনি সর্বদা কেবল কী কার্যকরী করবেন না তা ফাংশনটি বলতে পারবেন।
/**
* @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;
});
};
glue ='de|da|del|dos|do|das|des|la|della|delli'.split('|');
and another thing
হয়ে ওঠে and Another Thing
। সর্বদা প্রথম শব্দটিকে মূলধন করতে কেবল একটি মার্জিত উপায় প্রয়োজন।
যদি উপরের সমাধানগুলিতে ব্যবহৃত রেজেক্স আপনাকে বিভ্রান্ত করছে, এই কোডটি ব্যবহার করে দেখুন:
function titleCase(str) {
return str.split(' ').map(function(val){
return val.charAt(0).toUpperCase() + val.substr(1).toLowerCase();
}).join(' ');
}
split
নেই এটা একটি অ্যারের রূপান্তর, আপনি শুধু এটা যেমন স্পষ্টত দেখতে না কারণ map
মানে কি ব্যবহার করতে হবে না []
স্বরলিপি
আমি এই ফাংশনটি তৈরি করেছি যা সর্বশেষ নামগুলি হ্যান্ডেল করতে পারে (সুতরাং এটি শিরোনামের ক্ষেত্রে নয়) যেমন "ম্যাকডোনাল্ড" বা "ম্যাকডোনাল্ড" বা "ও'টুল" বা "ডি'রোজিও"। তবে এটি "ভ্যান" বা "ভন" দিয়ে জার্মান বা ডাচ নামগুলি পরিচালনা করে না যা প্রায়শই নিম্ন-ক্ষেত্রে হয় ... আমি বিশ্বাস করি "ডি" প্রায়শই নিম্ন-ক্ষেত্রে যেমন "রবার্ট ডি নিরো"। এগুলি এখনও সমাধান করতে হবে।
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(); });
}
macy
সেখানে একটি নেতিবাচক lookahead নির্বাণ দ্বারা আপনি সমস্যা তাই \b((m)(a?c))?(\w)
হয়ে\b((m)(a?c))?(\w)(?!\s)
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();
});
}
এটা চেষ্টা কর
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();
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()
যদি আপনি এখনও প্রথম চিঠিটি চান তবে সম্ভবত একটি মাথা উঁচু করা উচিত ।
str
একক চরিত্র হলে বিরতি
.charAt(0).toUpperCase()
।
এই উত্তরগুলির মধ্যে বেশিরভাগই সীমানা মেটাচার্যাক্টর (\ বি) শব্দটি ব্যবহার করার সম্ভাবনাটিকে উপেক্ষা করে বলে মনে হচ্ছে। এটি ব্যবহার করে গ্রেগ ডিনের উত্তরের একটি সংক্ষিপ্ত সংস্করণ:
function toTitleCase(str)
{
return str.replace(/\b\w/g, function (txt) { return txt.toUpperCase(); });
}
জিম-বব এর মতো হাইফেনেটেড নামের জন্য কাজ করে।
\w
শুধুমাত্র অক্ষর অন্তর্ভুক্ত [A-Za-z0-9_]
, সমস্ত অক্ষর। তার জন্য আপনার ইউনিকোড বিভাগটি ব্যবহার করা দরকার \p{L}
। আপনার /u
সংশোধক ( এখানে দেখুন ) এবং এর জন্য আলাদা সমাধান দরকার \b
যা কেবলমাত্র \W
এবং \w
( এখানে দেখুন ) এর মধ্যে কাজ করে
আপনি যদি আপনার কোডটিতে তৃতীয় পক্ষের লাইব্রেরিগুলি ব্যবহার করতে পারেন তবে লডাশের আমাদের জন্য একটি সহায়ক ফাংশন রয়েছে।
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'
আমি মনে করি সবচেয়ে সহজ সিএসএস ব্যবহার করছে।
function format_str(str) {
str = str.toLowerCase();
return '<span style="text-transform: capitalize">'+ str +'</span>';
}
/\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 আনশাইন ( ওয়াই এলো)" ⇒ " এস আনশাইন ( ওয়াই ইলো)"
আমি এখানে নিজের উত্তর যুক্ত করতে চেয়েছিলাম কারণ এখানে একটি শক্তিশালী 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');
});
});
দয়া করে নোট করুন যে আমি সরবরাহ করা স্ট্রিংগুলি থেকে বেশ কয়েকটি বিশেষ অক্ষর মুছে ফেলছি। আপনার প্রকল্পের প্রয়োজনীয়তাগুলি সমাধান করার জন্য আপনাকে রেইজেক্সটিকে টুইঙ্ক করতে হবে।
"john f. kennedy".replace(/\b\S/g, t => t.toUpperCase())
o'henry
, তবে অদ্ভুত স্টাফ দিয়ে horse's mouth
।
"john f. kennEdy".toLowerCase().replace(/\b\S/g, t => t.toUpperCase())
ভাল 🤔
\b
এবং " অক্ষরের সীমানা" এবং "একক, অ-সাদা স্থানের অক্ষর " বোঝানোর \S
জন্য বিশেষ চরিত্রের ক্লাস রয়েছে । সুতরাং, রেজেক্স শব্দের সীমা অনুসরণ করে প্রতিটি একক অক্ষরের সাথে মেলে এবং প্রদত্ত তীর ফাংশনটি প্রয়োগ করে সেই চরিত্রটিকে মূলধন করে।
"লেওয়াক্স০০" সমাধানটি গ্রহণ করে আমি এই সহজ সমাধানটি তৈরি করেছিলাম যা "ডাব্লু" এর সাথে স্পেস দিয়ে শুরু করতে বাধ্য হয় বা "ডাব্লু" যা ডি শব্দটি শুরু করে, তবে অতিরিক্ত মধ্যবর্তী স্থানগুলি সরাতে সক্ষম হয় না।
"SOFÍA vergara".toLowerCase().replace(/\b(\s\w|^\w)/g, function (txt) { return txt.toUpperCase(); });
ফলাফল "সোফিয়া ভার্গারা"।
এখানে আমার ফাংশনটি উচ্চারণযুক্ত অক্ষরগুলির যত্ন নিচ্ছে (ফরাসিদের জন্য গুরুত্বপূর্ণ!) এবং এটি নিম্নতর ব্যতিক্রমগুলি পরিচালনা করতে বা বন্ধ করতে পারে। আশা করি এইটি কাজ করবে.
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;
}
অফিসে আমরা এখানে আবার আলোচনা করেছি এবং আমরা মনে করি যে বর্তমান সময়ে আপনি যেভাবে লোকেরা নাম চান তা ইনপুটটি স্বয়ংক্রিয়ভাবে সংশোধন করার চেষ্টা করা সম্ভব সমস্যাগুলি দ্বারা পরিপূর্ণ।
আমরা বেশ কয়েকটি কেস নিয়ে এসেছি যেখানে বিভিন্ন ধরণের অটো ক্যাপিটালাইজেশন আলাদা হয়ে যায় এবং এগুলি কেবলমাত্র ইংরেজী নামের জন্য, প্রতিটি ভাষার নিজস্ব জটিলতা রয়েছে।
প্রতিটি নামের প্রথম অক্ষর মূলধন সহ সমস্যাগুলি:
I আইবিএম এর মতো সংক্ষিপ্ত নামগুলি ইনপুট করার অনুমতি নেই, ইবামে পরিণত হবে।
Mc নাম ম্যাকডোনাল্ড ম্যাকডোনাল্ডে পরিণত হবে যা ভুল, একই জিনিস ম্যাকডোনাল্ডও।
Mar মেরি-টঙ্কসের মতো ডাবল ব্যারেলড নামগুলি ম্যারি-টঙ্কে পরিণত হবে।
O ও'কনোরের মতো নামগুলি ওকনোনারে পরিণত হবে।
এর বেশিরভাগের জন্য আপনি এটি মোকাবেলার জন্য কাস্টম বিধিগুলি লিখতে পারেন, তবে, এরপরেও এর আগেরটির মতো একটি্রোনামগুলির সাথে সমস্যা রয়েছে এবং আপনি একটি নতুন সমস্যা পেয়েছেন:
Mac ম্যাকডোনাল্ডের মতো ম্যাকের সাথে নামগুলি সংশোধন করার নিয়মে যুক্ত করা, ম্যাসি যেমন ম্যাকিটিকে ম্যাকওয়াইতে রূপান্তরিত করে এমন নামকরণ করবে।
আমরা যে সমাধানটি নিয়ে এসেছি তা কখনই ভুল নয়, এটি হ'ল একটি অক্ষরকে মূলধন করে যা ডিবিএসও ব্যবহার করে বলে মনে হয় b
সুতরাং আপনি যদি প্রক্রিয়াটি স্বয়ংক্রিয় করতে চান তবে প্রতিটি একক নাম এবং শব্দের একটি অভিধান ছাড়া এটি করা যেমন অসম্ভব তত ভাল এবং কীভাবে এটি শিরোনাম করা উচিত, যদি আপনার কাছে এমন কোনও নিয়ম না থাকে যা সমস্ত কিছু কভার করে এটি এটি ব্যবহার না করে কেবলমাত্র আপনার ব্যবহারকারীদের বিরক্ত করবেন এবং তাদের নামগুলি সঠিকভাবে প্রবেশ করতে চান এমন লোকদের অন্য কোনও জায়গায় যেতে অনুরোধ করবেন।
সিএসএস ব্যবহার করে (এবং জাভাস্ক্রিপ্ট, আপনি যে পাঠ্যটি রূপান্তর করতে চান তা যদি বড় হাতের অক্ষরে থাকে তবে) এখানে আরও একটি সমাধান রয়েছে:
এইচটিএমএল
<span id='text'>JOHN SMITH</span>
JS
var str = document.getElementById('text').innerHtml;
var return_text = str.toLowerCase();
CSS
#text{text-transform:capitalize;}
আমাদের মধ্যে যারা নিয়মিত ভাব (ভিজি) থেকে ভয় পান:
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(" ");
}
আমার এক লাইনের সমাধান:
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
অবাক হয়ে অবাক হয়ে কেউ প্যারামিটার ব্যবহারের কথা উল্লেখ করেনি। এখানে একটি সাধারণ একটি লাইনার যা ES6 রেস্ট পরামিতি ব্যবহার করে।
let str="john smith"
str=str.split(" ").map(([firstChar,...rest])=>firstChar.toUpperCase()+rest.join("").toLowerCase()).join(" ")
console.log(str)
এটি ফ্রিকোডক্যাম্পের বনফায়ার "শিরোনাম কেস" এর জন্য আমার সমাধানের ভিত্তিতে তৈরি করা হয়েছে , যার জন্য আপনাকে প্রথমে প্রদত্ত স্ট্রিংটিকে সমস্ত লোয়ার কেসে রূপান্তর করতে হবে এবং তারপরে প্রতিটি চরিত্রকে স্থানের দিকে নিয়ে যাওয়া উপরের ক্ষেত্রে রূপান্তর করতে হবে।
রিজেক্স ব্যবহার না করে:
function titleCase(str) {
return str.toLowerCase().split(' ').map(function(val) { return val.replace(val[0], val[0].toUpperCase()); }).join(' ');
}