জাভাস্ক্রিপ্ট স্ট্রিংস (Javascript Strings) কীভাবে কাজ করে, মেথড, উদাহরণ

Javascript স্ট্রিং, জাভাস্ক্রিপ্ট স্ট্রিং, string methods, template literals, string manipulation, বাংলা টিউটোরিয়াল

এই আর্টিকেলে আপনি জানবেন—জাভাস্ক্রিপ্টে স্ট্রিং কী, কীভাবে তৈরি করবেন, কী কী মেথড আছে, এবং বাস্তব জীবনের উদাহরণসহ কিভাবে স্ট্রিং ম্যানিপুলেট করতে হয়। সমস্ত কোড স্যাম্পল <pre><code> ব্লকে দেওয়া আছে যাতে সরাসরি কপি-পেস্ট করে আপনার সাইটে ব্যবহার করতে পারেন।

বিষয়বস্তু
  1. জাভাস্ক্রিপ্টে স্ট্রিং কী?
  2. স্ট্রিং তৈরির পদ্ধতি
  3. স্ট্রিং প্রপার্টি (length ইত্যাদি)
  4. ইন্ডেক্সিং ও চরেক্টার এক্সেস
  5. প্রধান স্ট্রিং মেথডস (toUpperCase, trim...)
  6. অনুসন্ধান ও রূপান্তর (includes, replace)
  7. কনক্যাটেনেশন ও টেমপ্লেট লিটারাল
  8. মাল্টি-লাইন স্ট্রিং ও ইন্টারপোলেশন
  9. রেগুলার এক্সপ্রেশন (regex) সাথে স্ট্রিং
  10. পারফর্ম্যান্স টিপস এবং স্মৃতি (immutability)
  11. পাঠযোগ্যতা: বাইন্ডিং ও এনকোডিং
  12. প্রায়শই ব্যবহৃত ইউটিলিটি ফাংশন
  13. প্র্যাকটিক্যাল উদাহরণ: ফর্ম ভ্যালিডেশন, স্লাগ তৈরী
  14. টেবিল: স্ট্রিং মেথডস সংক্ষিপ্ত রেফারেন্স
  15. উপসংহার ও FAQ

জাভাস্ক্রিপ্টে স্ট্রিং কী?

স্ট্রিং বলতে জাভাস্ক্রিপ্টে টেক্সট বা অক্ষরের একটি সিরিজকে বোঝায়। এটি একটি প্রিমিটিভ ডাটা টাইপ (primitive) — অর্থাৎ স্ট্রিং অবজেক্ট নয়, তবে স্ট্রিং-প্রিমিটিভ-এ অস্থায়ীভাবে স্ট্রিং অবজেক্টে বর্ধিত করা হয় যখন মেথড কল করা হয়। প্রতিটি স্ট্রিং ক্যারেক্টার ইনডেক্সড হয় (0 থেকে শুরু) এবং স্ট্রিং ইমিউটেবল — মানে একটি স্ট্রিংকে সরাসরি পরিবর্তন করা যায় না, পরিবর্তে নতুন স্ট্রিং তৈরি করে ফলাফল পাই।

শুধু ৩ লাইনে একটি উদাহরণ:
// স্ট্রিং ডিক্লিয়ারেশন
let a = "Hello";
let b = 'World';
let c = `Hello, ${b}!`; // template literal

স্ট্রিং তৈরির পদ্ধতি

জাভাস্ক্রিপ্টে স্ট্রিং লেখার জন্য তিনটি প্রচলিত উপায় আছে:

  1. সিঙ্গেল কোট'...'
  2. ডাবল কোট"..."
  3. টেমপ্লেট লিটারেল — ব্যাকটিক `...` (ইন্টারপোলেশন ও মাল্টি-লাইন সাপোর্ট)
// Examples:
let s1 = 'এটা একটি স্ট্রিং';
let s2 = "এটাও স্ট্রিং";
let name = "আহাদ";
let s3 = `হ্যালো ${name}, কেমন আছো?`;

সাধারণত টেমপ্লেট লিটারেল ব্যবহার করলে কোড পরিষ্কার ও রিডেবল হয়, বিশেষত যখন ভ্যারিয়েবল ইনসার্ট করতে হয় বা নতুন লাইনে টেক্সট লিখতে হয়।

স্ট্রিং প্রপার্টি: length এবং আরও

প্রতিটি স্ট্রিং-প্রিমিটিভের একটি length প্রপার্টি আছে যা মোট ক্যারেক্টারের সংখ্যা বলে দেয়। মনে রাখবেন: UTF-16 surrogate pairs বা emoji ইত্যাদি ক্ষেত্রে একটা ভিজিবল glyph একাধিক code unit নিতে পারে — সোজা ক্ষেত্রে length যথাযথ, কিন্তু Unicode-সংশ্লিষ্ট স্পেশাল কেসে আলাদা হ্যান্ডলিং দরকার।

let text = "Javascript";
console.log(text.length); // 10

প্র্যাকটিক্যাল টিপ: যখন বাংলা বা emoji হ্যান্ডলিং করা লাগে, তখন Array.from(str) কিংবা spread operator ব্যবহার করে ইউনিটগুলো আলাদাভাবে নেওয়া ভালো:

let s = "🙂👍 বাংলা";
console.log(s.length); // may count code units
console.log(Array.from(s).length); // counts actual characters/glyphs

ইনডেক্সিং ও চরেক্টার এক্সেস

স্ট্রিং-এ প্রতিটি ক্যারেক্টারকে আপনি ইনডেক্স দিয়ে অ্যাক্সেস করতে পারবেন:

let word = "Hello";
console.log(word[0]); // "H"
console.log(word.charAt(1)); // "e"

নেগেটিভ ইনডেক্স সরাসরি সমর্থিত নয় (ES2022 পর্যন্ত)। শেষ থেকে নেবার জন্য আপনি slice(-1) বা at(-1) (নতুন) ব্যবহার করতে পারেন:

console.log(word.slice(-1)); // "o"
console.log(word.at(-1)); // "o" (নতুন ফিচার)

প্রধান স্ট্রিং মেথডস (প্রশস্ত ব্যবহৃত)

নিচে জাভাস্ক্রিপ্টে সবচেয়ে বেশি ব্যবহৃত স্ট্রিং মেথডগুলোর তালিকা ও উদাহরণ দেয়া হলো:

মেথডবর্ণনাউদাহরণ
toUpperCase()সকল অক্ষরকে বড় হাতের করে দেয়"hi".toUpperCase() // "HI"
toLowerCase()সকল অক্ষরকে ছোট করে দেয়"Hi".toLowerCase() // "hi"
trim()শুরু ও শেষে থাকা whitespace কেটে দেয়" hi ".trim() // "hi"
includes()কোনো সাবস্ট্রিং আছে কি না চেক করে (boolean)"hello".includes("ell") // true
indexOf()সাবস্ট্রিং এর প্রথম ইনডেক্স দেয়, না থাকলে -1"hello".indexOf("l") // 2
slice()নির্দিষ্ট অংশ কেটে আনে"hello".slice(1,4) // "ell"
replace()প্রথম ম্যাচ বা regex দিয়ে প্রতিস্থাপন করে"abc".replace("b","B") // "aBc"
split()স্ট্রিংকে অ্যারে তে ভাগ করে"a,b,c".split(",") // ["a","b","c"]
কিছু দ্রুত উদাহরণ:
let s = "   Hello World!   ";
console.log(s.trim().toUpperCase()); // "HELLO WORLD!"
console.log("banana".replace("a","A")); // "bAnana" (কেবল প্রথমটি বদলে)

অনুসন্ধান ও রূপান্তর: includes, indexOf, replace এবং regex

স্ট্রিং-এ কোনো শব্দ আছে কি না, কোথায় আছে, কিংবা একাধিক স্থানে রূপান্তর করার জন্য আমরা includes(), indexOf(), replace() ও নিয়মিত অভিব্যক্তি (regular expressions) ব্যবহার করি।

// includes
console.log("I love JS".includes("love")); // true

// indexOf
console.log("hello hello".indexOf("hello")); // 0

// replace with regex (global)
console.log("foo foo".replace(/foo/g, "bar")); // "bar bar"

নোট: replace এর ডিফল্ট আচরণ শুধু প্রথম ম্যাচ প্রতিস্থাপন করা। সবগুলো প্রতিস্থাপন করতে /pattern/g (global) ফ্ল্যাগ ব্যবহার করুন।

কনক্যাটেনেশন ও টেমপ্লেট লিটারাল

স্ট্রিং যোগ করার প্রচলিত উপায় হলো + অপারেটর। কিন্তু টেমপ্লেট লিটারাল (backticks) ব্যবহার করলে ভ্যারিয়েবল ইনসার্ট করা, একাধিক লাইন লেখা অনেকই পরিষ্কার হয়।

// concatenation
let a = "Good";
let b = "Morning";
console.log(a + " " + b); // "Good Morning"

// template literal
let name = "মিলি";
console.log(`হ্যালো ${name}, আজকের তারিখ ${new Date().toLocaleDateString()}`);

মাল্টি-লাইন স্ট্রিং ও ইন্টারপোলেশন

পুরনো স্টাইল (অপেক্ষাকৃত কষ্টসাধ্য) অনুযায়ী মাল্টি-লাইন স্ট্রিং বানাতে আপনাকে newline escape করতে হতো। টেমপ্লেট লিটারেল দিয়ে সরাসরি মাল্টি-লাইন লেখা যায়:

let paragraph = `এটি একটি বহু-লাইন স্ট্রিং।
আপনি এখানে নতুন লাইন সরাসরি লিখতে পারবেন।
ইন্টারপোলেশনও সহজ: ${name}`;

রেগুলার এক্সপ্রেশন (Regex) দিয়ে স্ট্রিং কন্ট্রোল

Regex খুব শক্তিশালী—প্যাটার্ন-ম্যাচিং, ভ্যালিডেশন, সাবস্ট্রিং এক্সট্র্যাকশন ইত্যাদিতে ব্যবহার হয়। উদাহরণ: ইমেল ভ্যালিডেশন বা নির্দিষ্ট ক্যারেক্টার সরানো।

// সহজ ইমেল ভ্যালিডেশন (বেসিক)
let re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
console.log(re.test("test@example.com")); // true

// সকল নন-অক্ষর সংখ্যা সরানো
let noisy = "Phone: +880-171-0000000";
let digitsOnly = noisy.replace(/\D/g, "");
console.log(digitsOnly); // "8801710000000"

পারফর্ম্যান্স ও ইমিউটেবিলিটি (immutability)

স্ট্রিং ইমিউটেবল হওয়ায় প্রতিটি ছোট পরিবর্তন নতুন স্ট্রিং তৈরি করে—এটি যদি অত্যাধিক রিপ্লেস/কনক্যাট প্রয়োগ করা হয় তবে পারফর্ম্যান্স ইস্যু তৈরি হতে পারে। বড় টেক্সট ব্লকে বহুবার যোগ করতে চাইলে অ্যারে তে push করে শেষে join() ব্যবহার করা দ্রুততর হতে পারে:

// ঠিক না (বড় লুপে)
let s = "";
for(let i=0;i<10000;i++){ s += i + ","; }

// ভালো পদ্ধতি
let parts = [];
for(let i=0;i<10000;i++){ parts.push(i); }
let sFast = parts.join(",");

পাঠযোগ্যতা: এনকোডিং এবং নিরাপত্তা

ওয়েব কনটেন্টে স্ট্রিং রেন্ডারিংয়ে এনকোডিং গুরুত্বপূর্ণ—সঠিকভাবে UTF-8 ব্যবহার করা নিশ্চিত করুন। ইউজার ইনপুট সরাসরি HTML-এ ইঞ্জেক্ট না করে অবশ্যই স্যানিটাইজ করুন, অন্যথায় XSS ঝুঁকি থাকতে পারে। সাধারণত টেমপ্লেটিং লাইব্রেরি বা textContent ব্যবহার করে HTML এ সরাসরি ইনজেকশন এড়ানো যায়।

// নিরাপদ রেন্ডারিং (DOM)
let div = document.createElement("div");
div.textContent = userInput; // স্যানিটাইজ করে দেয়

জনপ্রিয় ইউটিলিটি ফাংশন (ছোট কিন্তু কাজে লাগে)

  1. capitalize() — প্রথম অক্ষর বড় করে দেওয়া
  2. slugify() — URL-friendly string তৈরি
  3. truncate() — লম্বা টেক্সট সংক্ষিপ্ত করা
// capitalize
function capitalize(s){ return s.charAt(0).toUpperCase() + s.slice(1); }

// slugify (সাধারণ)
function slugify(s){
  return s.toString().toLowerCase().trim()
    .replace(/\s+/g,'-')       // whitespace -> dash
    .replace(/[^\w\-]+/g,'')   // non-word remove
    .replace(/\-\-+/g,'-');    // multiple dashes -> single
}

// truncate
function truncate(s, n=100){ return s.length>n ? s.slice(0,n-1)+"…" : s; }

প্র্যাকটিক্যাল উদাহরণসমূহ

ফর্ম ভ্যালিডেশন: নাম ও ফোন নাম্বার যাচাই

function validateName(name){
  return !!name && name.trim().length >= 2;
}

function validatePhone(phone){
  // বাংলাদেশ ফোন (সরল) : 11 সংখ্যার কোড
  let digits = phone.replace(/\D/g,"");
  return /^(\d{11})$/.test(digits);
}

console.log(validateName("আহাদ")); // true
console.log(validatePhone("+8801710000000")); // true

স্লাগ (slug) তৈরি করে ব্লগ URL বানানো

function makeSlug(title){
  return title.toString().toLowerCase().trim()
    .replace(/[^\u0e00-\uFFFF\w\s-]/g,'') // বাংলা/ইংরেজি অক্ষর রেখে অবাঞ্ছিত মুছে
    .replace(/\s+/g,'-')
    .replace(/\-+/g,'-');
}

console.log(makeSlug("জাভাস্ক্রিপ্ট স্ট্রিংস: কিভাবে কাজ করে?"));
// সম্ভবত -> "জাভাস্ক্রিপ্ট-স্ট্রিংস-কিভাবে-কাজ- করে"

সামান্য টাস্ক: কিভাবে একটি বাক্যকে শব্দভিত্তিক অ্যারেতে রূপান্তর করবেন

let sentence = "আমি বাংলায় কোড লিখি।";
let words = sentence.split(/\s+/).filter(Boolean);
console.log(words); // ["আমি","বাংলায়","কোড","লিখি।"]

স্ট্রিং মেথডস রেফারেন্স টেবিল (সংক্ষিপ্ত)

মেথডকী করে
charAt(i)i-তম অক্ষর ফেরত
charCodeAt(i)i-তম চর এর ইউনিকোড কোড
concat()স্ট্রিং জোড়া
endsWith(substr)কিছু দিয়ে শেষ হয় কি না
includes(substr)সাবস্ট্রিং আছে কি না
match(regex)regex-ম্যাচ রিটার্ন
padStart, padEndপ্যাড করে স্ট্রিং
repeat(n)স্ট্রিং n বার রিপিট করে
replace()প্রতিস্থাপন
split()অ্যারে তে ভাগ
startsWith(substr)শুরু কি একইভাবে
substr(start, len)বিশেষ অংশ ফেরত (deprecated)
substring(start, end)part of string
toLowerCase(), toUpperCase()কেস রূপান্তর
trim(), trimStart(), trimEnd()whitespace কেটে দেয়

উপসংহার

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

প্রশ্নোত্তর (FAQ)

১) স্ট্রিং ইমিউটেবল কি?

হ্যাঁ। স্ট্রিং ইমিউটেবল—অর্থাৎ একটি স্ট্রিং-প্রিমিটিভের কোনো অংশ সরাসরি পরিবর্তন করা যায় না। পরিবর্তিত মান পেতে নতুন স্ট্রিং তৈরি করা হয়।

২) Unicode বা emoji সঠিকভাবে গণনা করতে কী করবেন?

Unicode surrogate pairs বা emoji-এর সঠিক ক্যারেক্টার গণনার জন্য Array.from(str) বা spread operator ([...str]) ব্যবহার করুন। এগুলো ভিজিবল glyph-এ বিভক্ত করে।

৩) কনক্যাটেনেশনে দ্রুত উপায় কী?

বড় লুপে বারবার += ব্যবহার না করে অ্যারের মধ্যে অংশগুলো রেখে শেষে join() ব্যবহার করা দ্রুততর।

৪) HTML-এ ইউজার ইনপুট কিভাবে নিরাপদে দেখাবো?

সরাসরি innerHTML ব্যবহার না করে DOM এ টেক্সট 넣ার সময় textContent বা নিরাপদ টেমপ্লেটিং লাইব্রেরি ব্যবহার করুন যাতে XSS এড়ানো যায়।

৫) কখন Regex না ব্যবহার করাই ভালো?

সাধারণ টাস্ক যেমন সোজা substring check বা simple replace-এর জন্য Regex অতিরিক্ত জটিলতা বাড়াতে পারে। Regex-এ ভুল প্যাটার্ন পারফর্ম্যান্স সমস্যা বা ভুল ফল দিতে পারে—তাই প্রয়োজনে ব্যবহার করুন।

ডাউনলোড ও ব্যবহার: উপরের সব <pre><code> ব্লক সরাসরি কপি করে আপনার সাইটে পেস্ট করতে পারেন। যদি আরও অনুরোধ থাকে—উদাহরণ: বাংলা-স্পেশাল ক্যারেক্টার হ্যান্ডলিং কিভাবে করবেন, slugify-बাংলা উন্নত করার পদ্ধতি ইত্যাদি—বলুন, বাড়তি উদাহরণ যোগ করে দিব।

মন্তব্য/রিভিউ করতে ভুলবেন না — আপনার প্রতিক্রিয়া কাজের গুণগত মান বাড়ায়।

About the author

Leo
Hey! I'm Leo. I'm always eager to learn new things and enjoy sharing my knowledge with others.

Post a Comment

To avoid SPAM, all comments will be moderated before being displayed.
Don't share any personal or sensitive information.