একটি স্ট্রিংকে তিন গ্রুপে ভাগ করা: অক্ষর (A-Z, a-z), সংখ্যা (0-9), এবং স্পেশাল ক্যারেক্টার।
উদাহরণ
Input: "Th!s String C0nt@1ns d1fferent ch@ract5rs"
Output:
{
alpha: "ThsStringCntnsdfferentchractrs",
numbers: "0115",
special: "! @ @"
}
সমাধান
const separateCharacters = (str) => {
const result = { alpha: '', numbers: '', special: '' };
for (const char of str) {
if (char >= '0' && char <= '9') {
result.numbers += char;
} else if (char.toUpperCase() !== char.toLowerCase()) {
// অক্ষর (upper !== lower মানে আলফাবেটিক)
result.alpha += char;
} else {
result.special += char;
}
}
return result;
};
// Regex ভার্সন (আরো স্পষ্ট)
const separateCharactersRegex = (str) => {
return {
alpha: (str.match(/[A-Za-z]/g) || []).join(''),
numbers: (str.match(/[0-9]/g) || []).join(''),
special: (str.match(/[^A-Za-z0-9]/g) || []).join('')
};
};
// টেস্ট
const str = "Th!s String C0nt@1ns d1fferent ch@ract5rs";
console.log(separateCharacters(str));
console.log(separateCharactersRegex(str));
ব্যাখ্যা
- char.toUpperCase() !== char.toLowerCase(): ইউনিকোড-সেফ অক্ষর ডিটেকশন
- Regex: আরও পড়া সহজ এবং রক্ষণাবেক্ষণে সহজ
- অর্ডার: মূল স্ট্রিংয়ের অর্ডার সংরক্ষিত থাকে
ইউনিকোড সাপোর্ট
// বাংলা/ইউনিকোড টেক্সটের জন্য
const separateUnicode = (str) => {
return {
letters: (str.match(/\p{L}/gu) || []).join(''), // যেকোনো ভাষার অক্ষর
numbers: (str.match(/\p{N}/gu) || []).join(''), // যেকোনো স্ক্রিপ্টের সংখ্যা
others: (str.match(/[^\p{L}\p{N}]/gu) || []).join('') // বাকি সব
};
};
console.log(separateUnicode("বাংলা123!@#"));
// {letters: "বাংলা", numbers: "123", others: "!@#"}
উৎপাদন
{
numbers: '0115',
alpha: 'ThsStringCntnsdfferentchractrs',
special: '! @ @'
}