Mundarija (37)
- Bu darsda
- 1. Nega bu kerak?
- 2. Asosiy qoida: asl satr o'zgarmaydi
- 3. Katta va kichik harf
- 3.1 toUpperCase va toLowerCase
- 3.2 Harfdan qat'i nazar solishtirish
- 3.3 Uzunlik o'zgarishi mumkin
- 4. Tilga bog'liq harflar: toLocaleUpperCase
- 4.1 Turkcha I muammosi
- 4.2 O'zbek tili uchun nima to'g'ri?
- 4.3 Argumentsiz toLocaleUpperCase — yashirin tuzoq
- 5. trim — chetdagi bo'sh joylarni olib tashlash
- 5.1 Asosiy ishlatilishi
- 5.2 O'rtadagi bo'sh joylarga tegmaydi
- 5.3 trimStart va trimEnd
- 5.4 Bo'sh maydonni aniqlash
- 6. replace va replaceAll — almashtirish
- 6.1 replace — faqat birinchisi
- 6.2 replaceAll — hammasi
- 6.3 O'chirish — bo'sh satrga almashtirish
- 6.4 O'zingiz to'ldiring
- 6.5 $ belgisi bilan ehtiyot bo'ling
- 6.6 replaceAll ham hamma narsani hal qilmaydi
- 7. concat — satrlarni birlashtirish
- 8. Hammasi birga: forma ma'lumotini tozalash
- 9. Hujumchi nigohi
- 10. Ko'p uchraydigan xatolar
- 10.1 Natijani saqlamaslik
- 10.2 Qavsni unutish
- 10.3 replace hammasini almashtiradi deb o'ylash
- 10.4 Maydon bo'sh kelsa
- 11. Mashqlar
- 1-mashq (oson): Natijani oldindan ayting
- 2-mashq (o'rta): Promokodni tekshirish
- 3-mashq (qiyin): Buyurtma formasini tozalash
- 12. Real ishda
- Xulosa
JavaScript'da matnni o'zgartirish va tozalash: toUpperCase, trim, replace
Qisqacha:
toUpperCase()vatoLowerCase()matnni katta yoki kichik harfga o'tkazadi,trim()chetdagi bo'sh joylarni olib tashlaydi.replacefaqat birinchi uchragan bo'lakni almashtiradi,replaceAll— hammasini. Bu metodlarning hech biri asl satrni o'zgartirmaydi: ular yangi satr qaytaradi, uni o'zgaruvchiga saqlash kerak.
Bu darsda
- Matnni katta va kichik harfga o'tkaza olasiz va harfdan qat'i nazar solishtira olasiz.
toLocaleUpperCasenima uchun kerakligini va "turkcha I" tuzog'ini bilasiz.trim,trimStartvatrimEndbilan ortiqcha bo'sh joylarni olib tashlay olasiz.replacevareplaceAllfarqini bilasiz va matndan keraksiz belgilarni o'chira olasiz.- Formadan kelgan ism, email va telefon raqamini tozalay olasiz.
Oldin bilishingiz kerak: String asoslari, Matn ichida qidirish, Kesish, bo'lish va to'ldirish.
1. Nega bu kerak?
Malika saytingizda ro'yxatdan o'tdi. Telefonda yozgani uchun email maydonida shunday matn qoldi: " Malika.Karimova@Mail.UZ ". Boshida bo'sh joy, oxirida bo'sh joy, harflar aralash. Dastur buni shundayligicha saqladi.
Ertasi kuni Malika kompyuterdan kirmoqchi bo'ldi va malika.karimova@mail.uz deb yozdi. Dastur javob berdi: "Bunday foydalanuvchi topilmadi". Malika xafa bo'ldi va saytni tark etdi.
Muammo — bir xil ma'lumotning har xil yozilishi. Telefon raqami bilan ham shunday: +998 (90) 123-45-67, 998901234567 va +998 90 123 45 67 — bitta raqam. Lekin kompyuter uchun bu uch xil satr.
Yechim: ma'lumotni saqlash va solishtirishdan oldin tozalash — bitta umumiy ko'rinishga keltirish. Bu darsdagi metodlar aynan shu ish uchun.
2. Asosiy qoida: asl satr o'zgarmaydi
Metodlarni ko'rishdan oldin bitta qoidani esga olamiz. U bu darsda eng muhim.
const ism = "jasur";
const katta = ism.toUpperCase();
console.log(katta); // JASUR
console.log(ism); // jasurtoUpperCase nomi "katta harfga o'tkaz" degani. Lekin ism o'zgarmadi — metod yangi satr yasab, uni qaytardi. String asoslari darsida ko'rgandik: satrni joyida o'zgartirib bo'lmaydi.
Bu darsdagi hamma metodlar shunday ishlaydi. Natija kerak bo'lsa — uni o'zgaruvchiga saqlang.
3. Katta va kichik harf
3.1 toUpperCase va toLowerCase
console.log("Gulnora".toUpperCase()); // GULNORA
console.log("GULNORA".toLowerCase()); // gulnora
console.log("o'zbekiston".toUpperCase()); // O'ZBEKISTON
console.log("Toshkent-2026!".toUpperCase()); // TOSHKENT-2026!Faqat harflar o'zgaradi. Raqamlar, tinish belgilari va apostrof joyida qoladi. Shuning uchun o' va g' bilan hech qanday muammo yo'q.
3.2 Harfdan qat'i nazar solishtirish
Do'kon promokod berdi: BAHOR2026. Mijoz esa bahor2026 deb yozdi. Qat'iy tenglik ularni har xil deb hisoblaydi:
const promokod = "BAHOR2026";
const kiritilgan = "bahor2026";
console.log(kiritilgan === promokod); // false
console.log(kiritilgan.toUpperCase() === promokod); // trueQoida: ikkala tomonni bir xil ko'rinishga keltirib, keyin solishtiring. Promokodlar odatda katta harfda saqlanadi — kiritilgan matnni ham katta harfga o'tkazamiz. Emaillar esa odatda kichik harfda saqlanadi.
3.3 Uzunlik o'zgarishi mumkin
Kamdan-kam holat, lekin bilib qo'ying: ba'zi tillarda harf katta harfga o'tganda ikki harfga aylanadi. Nemischa ß katta harfda SS bo'ladi:
console.log("straße".toUpperCase()); // STRASSE
console.log("straße".length); // 6
console.log("straße".toUpperCase().length); // 7Demak, katta harfga o'tkazilgan matn uzunligi asl matnnikidan farq qilishi mumkin. Indekslar bilan ishlaganda buni hisobga oling.
Tekshirib ko'ring:
"Andijon 2026".toLowerCase()nima qaytaradi? Asl satr o'zgaradimi?
Javob
"andijon 2026". Faqat A kichik harfga o'tdi — raqamlar va bo'sh joy o'zgarmaydi. Asl satr o'zgarmaydi: toLowerCase yangi satr qaytaradi.
4. Tilga bog'liq harflar: toLocaleUpperCase
4.1 Turkcha I muammosi
Ingliz va o'zbek tilida i ning katta harfi — I. Turk tilida esa ikki xil "i" bor:
| Kichik | Katta | Qanday harf |
|---|---|---|
i |
İ |
Nuqtali i |
ı |
I |
Nuqtasiz i |
Oddiy toUpperCase bu farqni bilmaydi. Turkcha matnni to'g'ri o'zgartirish uchun til belgisi (locale) — tilni bildiruvchi qisqa kod — beriladi. Buni toLocaleUpperCase va toLocaleLowerCase metodlari qiladi:
console.log("istanbul".toUpperCase()); // ISTANBUL
console.log("istanbul".toLocaleUpperCase("tr")); // İSTANBUL
console.log("INTERNET".toLocaleLowerCase("tr")); // ınternet"tr" — turk tili kodi. Turkiyalik o'quvchi uchun ikkinchi natija to'g'ri, birinchisi xato. Ozarbayjon tilida ("az") ham xuddi shunday qoida bor.
4.2 O'zbek tili uchun nima to'g'ri?
O'zbek lotin alifbosida i va I — ingliz tilidagi kabi oddiy juftlik. Shuning uchun o'zbekcha matn uchun oddiy toUpperCase to'g'ri ishlaydi. "uz" kodi bilan ham natija bir xil:
console.log("ilmhamroh".toUpperCase()); // ILMHAMROH
console.log("ilmhamroh".toLocaleUpperCase("uz")); // ILMHAMROH
console.log("ilmhamroh".toLocaleUpperCase("tr")); // İLMHAMROHUchinchi qatorga qarang. O'zbek va turk tillari yaqin bo'lgani uchun ba'zan "tr" ni tanlab qo'yishadi. Natijada o'zbekcha matnda nuqtali İ paydo bo'ladi — bu xato. O'zbekcha matn uchun hech qachon "tr" yoki "az" ishlatmang.
4.3 Argumentsiz toLocaleUpperCase — yashirin tuzoq
toLocaleUpperCase() ni argumentsiz chaqirsangiz, u foydalanuvchi kompyuteridagi til qoidasini oladi. Sizning kompyuteringizda hammasi to'g'ri ishlaydi. Turkcha sozlangan kompyuterda esa "info" so'zi "İNFO" ga aylanadi. Keyin "İNFO" === "INFO" — false, va dastur "tushunarsiz" sabab bilan buziladi.
Bu dasturchilar orasida mashhur xato. Undan qochish qoidasi:
- Texnik matnlar (email, login, promokod, buyruq nomi) — faqat
toUpperCasevatoLowerCase. Ular hamma kompyuterda bir xil ishlaydi. - Odamga ko'rsatiladigan matn muayyan tilda bo'lsa —
toLocaleUpperCaseva til kodini aniq yozing:("tr"),("uz").
Tekshirib ko'ring: Foydalanuvchi loginini katta-kichik harfsiz solishtirish kerak. Qaysi biri to'g'ri:
login.toLowerCase()yokilogin.toLocaleLowerCase()?
Javob
login.toLowerCase(). Login — texnik matn, u hamma kompyuterda bir xil natija berishi kerak. toLocaleLowerCase() argumentsiz chaqirilsa, turkcha kompyuterda I harfi nuqtasiz ı ga aylanib ketadi va bir xil login ikki xil bo'lib qoladi.
5. trim — chetdagi bo'sh joylarni olib tashlash
5.1 Asosiy ishlatilishi
Foydalanuvchilar tez-tez ortiqcha bo'sh joy qoldiradi. Telefon klaviaturasi ham so'zdan keyin o'zi bo'sh joy qo'yib yuboradi. trim (inglizcha "qirqib tekislamoq") matnning boshi va oxiridagi bo'sh joylarni olib tashlaydi:
const ism = " Jasur ";
console.log(ism.trim() === "Jasur"); // true
console.log(ism.length); // 10
console.log(ism.trim().length); // 5trim faqat oddiy bo'sh joyni emas, barcha "ko'rinmas" belgilarni olib tashlaydi. Ular orasida tab (\t) va yangi qator (\n) ham bor — ularni String asoslari darsida escape sifatida ko'rgandik:
const kiritilgan = "\t Toshkent \n";
console.log(kiritilgan.trim() === "Toshkent"); // trueMatndan nusxa ko'chirib qo'yilganda ko'pincha shunday ko'rinmas belgilar ham birga keladi. Saytlardan olingan matnda "uzilmaydigan bo'sh joy" (non-breaking space) degan maxsus belgi ham uchraydi. trim uni ham tozalaydi.
5.2 O'rtadagi bo'sh joylarga tegmaydi
console.log(" Ali Valiyev ".trim()); // Ali ValiyevSo'zlar orasidagi uchta bo'sh joy qoldi. trim faqat chetlarni tozalaydi. O'rtadagisini qanday tuzatishni replaceAll bo'limida ko'ramiz.
5.3 trimStart va trimEnd
Ba'zan faqat bir tomonni tozalash kerak. Masalan, she'r yoki kod bo'lagida boshidagi surilish (chekinish) muhim bo'lishi mumkin:
const matn = " Salom ";
console.log(`[${matn.trimStart()}]`); // [Salom ]
console.log(`[${matn.trimEnd()}]`); // [ Salom]Bo'sh joylar ko'rinishi uchun natijani kvadrat qavs ichida chiqardik. trimStart — faqat boshidan, trimEnd — faqat oxiridan tozalaydi.
Eski kodda trimLeft va trimRight nomlarini ham uchratasiz. Ular aynan shu metodlarning eski nomlari — hali ishlaydi, lekin yangi kodda trimStart va trimEnd yoziladi.
5.4 Bo'sh maydonni aniqlash
Truthy va falsy darsida bir muammoni ko'rgan edik: " " (faqat bo'sh joy) — truthy. Foydalanuvchi izoh maydoniga faqat probel bosib yuborsa, dastur "izoh yozilgan" deb o'ylaydi. Endi buni to'g'ri tekshira olamiz:
const izoh = " ";
console.log(Boolean(izoh)); // true
console.log(izoh.trim() === ""); // trueBirinchi qator "nimadir bor" deydi. Ikkinchisi haqiqatni aytadi: bo'sh joylarni olib tashlasak, hech narsa qolmaydi. Formadagi har bir majburiy maydon shunday tekshiriladi.
Tekshirib ko'ring:
" Buxoro ".trimEnd().lengthnechaga teng?
Javob
8. Asl satr — 2 bo'sh joy, "Buxoro" (6 harf) va yana 2 bo'sh joy. trimEnd faqat oxiridagi 2 tasini olib tashlaydi. Boshidagi 2 bo'sh joy va 6 harf qoladi: 2 + 6 = 8.
6. replace va replaceAll — almashtirish
6.1 replace — faqat birinchisi
replace (inglizcha "almashtirmoq") ikki argument oladi: nimani qidirish va nimaga almashtirish.
const xabar = "Buyurtma qabul qilindi";
const yangi = xabar.replace("qabul qilindi", "yo'lda");
console.log(yangi); // Buyurtma yo'ldaMuhim tafsilot: replace faqat birinchi uchragan bo'lakni almashtiradi:
const savat = "olma-olma-olma";
console.log(savat.replace("olma", "nok")); // nok-olma-olmaQidirish katta-kichik harfga sezgir, xuddi includes kabi. Bo'lak topilmasa, xato bo'lmaydi — satr o'zgarishsiz qaytadi:
console.log("Toshkent".replace("t", "T")); // ToshkenT
console.log("Salom".replace("x", "y")); // SalomBirinchi qatorda boshidagi katta T hisobga olinmadi. Kichik t faqat oxirida bor — o'sha almashtirildi.
6.2 replaceAll — hammasi
Hamma uchragan joyni almashtirish uchun replaceAll bor:
const savat = "olma-olma-olma";
console.log(savat.replaceAll("olma", "nok")); // nok-nok-nokreplaceAll JavaScript'ga 2021-yilda qo'shilgan. Undan oldin buning uchun regex ishlatilardi — eski kodda replace(/-/g, "") kabi yozuvni ko'rasiz. Bu "hamma - larni o'chir" degani. Regex'ni RegExp asoslari darsida o'rganamiz — hozir bilish shart emas.
6.3 O'chirish — bo'sh satrga almashtirish
Belgini o'chirish uchun uni bo'sh satr "" ga almashtiramiz. Telefon raqamini tozalashning to'liq misoli:
const tel = "+998 (90) 123-45-67";
const toza = tel
.replaceAll(" ", "")
.replaceAll("(", "")
.replaceAll(")", "")
.replaceAll("-", "");
console.log(toza); // +998901234567Bu oldingi darsda ko'rgan zanjir, faqat uzunroq. Har bir replaceAll oldingisining natijasi ustida ishlaydi. Zanjir uzun bo'lsa, har bir metodni yangi qatorga nuqta bilan boshlab yozish odat — o'qish oson bo'ladi.
Qadamma-qadam nima bo'ldi:
| Qadam | Natija |
|---|---|
| Boshida | +998 (90) 123-45-67 |
| Bo'sh joylar o'chdi | +998(90)123-45-67 |
( o'chdi |
+99890)123-45-67 |
) o'chdi |
+99890123-45-67 |
- o'chdi |
+998901234567 |
Endi bu raqamni bazadagi +998901234567 bilan bemalol solishtirish mumkin.
6.4 O'zingiz to'ldiring
Sana 27.09.2026 ko'rinishida keldi. Uni 27/09/2026 ga aylantiring:
const sana = "27.09.2026";
console.log(sana.[___:replaceAll](".", "/")); // 27/09/2026Yechim
const sana = "27.09.2026";
console.log(sana.replaceAll(".", "/")); // 27/09/2026Nuqta ikki marta uchraydi. replace faqat birinchisini almashtirib, 27/09.2026 bergan bo'lardi.
6.5 $ belgisi bilan ehtiyot bo'ling
replace va replaceAll ning ikkinchi argumentida $ belgisi maxsus ma'noga ega bo'lishi mumkin. $& — "topilgan bo'lak", $$ — "bitta $ belgisi":
console.log("Narx: X".replace("X", "$&!")); // Narx: X!
console.log("Narx: X".replace("X", "$$20")); // Narx: $20Birinchi qatorda $& o'rniga topilgan X qo'yildi. Ikkinchisida $$ bitta $ ga aylandi. Oddiy matnda bu kamdan-kam uchraydi. Lekin almashtirish matnida $ bo'lsa va natija g'alati chiqsa — sababi shu.
6.6 replaceAll ham hamma narsani hal qilmaydi
trim bo'limidagi "Ali Valiyev" ni esga oling — so'zlar orasida uchta bo'sh joy bor edi. Uni replaceAll bilan tuzatishga urinib ko'ramiz:
const ism = "Ali Valiyev";
console.log(ism.replaceAll(" ", " ")); // Ali ValiyevHali ham ikkita bo'sh joy qoldi. Sababi: replaceAll uchta bo'sh joyning birinchi ikkitasini topib, bittaga almashtirdi. Uchinchisi yolg'iz qoldi va keyingi juftlikka qo'shildi.
"Bir yoki undan ko'p bo'sh joy" degan naqshni faqat regex ifodalay oladi: ism.replace(/\s+/g, " "). Buni RegExp asoslari darsida to'liq tushunasiz. Hozircha shuni biling: oddiy matn bilan almashtirish qo'lingizdan keladi, murakkab naqsh uchun regex kerak.
Tekshirib ko'ring:
"a.b.c".replace(".", "-")va"a.b.c".replaceAll(".", "-")nima qaytaradi?
Javob
"a-b.c" va "a-b-c". replace faqat birinchi nuqtani almashtiradi, replaceAll — ikkalasini ham.
7. concat — satrlarni birlashtirish
concat bir yoki bir nechta satrni oxiriga qo'shadi:
const ism = "Ali";
console.log(ism.concat(" ", "Valiyev")); // Ali Valiyev
console.log("Soni: ".concat(5)); // Soni: 5Son berilsa, u avval satrga aylanadi. Natija + operatori bilan bir xil: ism + " " + "Valiyev".
Amalda concat kam ishlatiladi. + va ayniqsa template literal qisqaroq va tushunarliroq: `${ism} Valiyev`. Tuzog'i ham bor — undefined ni ham jimgina matnga aylantiradi:
let familiya;
console.log("Ism: Ali ".concat(familiya)); // Ism: Ali undefinedconcat ni boshqalarning kodida tanib olsangiz yetarli. Massivlarda ham shu nomli metod bor — uni massiv darsida ko'ramiz.
8. Hammasi birga: forma ma'lumotini tozalash
Ro'yxatdan o'tish formasidan uchta maydon keldi. Ularni saqlashdan oldin tozalaymiz:
const ismXom = " jASUR ";
const emailXom = " Malika.Karimova@Mail.UZ ";
const telXom = "+998 (90) 123-45-67";
// Ism: chetlarni tozalash, birinchi harf katta, qolgani kichik
const ism = ismXom.trim();
const bosh = ism.slice(0, 1).toUpperCase();
const toza = bosh + ism.slice(1).toLowerCase();
// Email: chetlarni tozalash va kichik harf
const email = emailXom.trim().toLowerCase();
// Telefon: bo'sh joy, qavs va tirelarni o'chirish
const tel = telXom
.replaceAll(" ", "")
.replaceAll("(", "")
.replaceAll(")", "")
.replaceAll("-", "");
console.log(toza); // Jasur
console.log(email); // malika.karimova@mail.uz
console.log(tel); // +998901234567Ism uchun oldingi darsdagi slice ishlatildi. slice(0, 1) — birinchi harf, u katta harfga o'tdi. slice(1) — qolgan hammasi, u kichik harfga o'tdi. Keyin ikkalasi + bilan qo'shildi.
Zanjirda tartib ham muhim. Ismni avval trim qilamiz, keyin kesamiz. Aks holda slice(0, 1) birinchi harfni emas, bo'sh joyni olardi.
9. Hujumchi nigohi
Forma — foydalanuvchidan keladigan har qanday matn. Uni faqat "chiroyli qilish" uchun emas, xavfsizlik uchun ham tozalaymiz.
Hujum 1: "soxta admin". Saytda admin degan login bor. Hujumchi Admin yoki admin (oxirida bo'sh joy) loginli yangi hisob ochadi. Dastur solishtirishda ularni har xil deb biladi va ro'yxatdan o'tkazadi. Endi chatda "Admin" nomli odam boshqalardan parol so'raydi — ko'pchilik unga ishonadi.
Qarshi chora: loginni saqlashdan oldin ham, solishtirishdan oldin ham bir xil tozalash:
const bor = "admin";
const yangi = " Admin ";
console.log(yangi === bor); // false
console.log(yangi.trim().toLowerCase() === bor); // trueTozalangan ko'rinishda bu login allaqachon band. Dastur yangi hisob ochishni rad etadi.
Hujum 2: replace bilan "himoya". Ba'zi boshlovchilar xavfli HTML tegini shunchaki o'chirib tashlashga urinadi. Hujumchi esa tegni ikkiga bo'lib yozadi:
const hujum = "<scr<script>ipt>";
console.log(hujum.replaceAll("<script>", "")); // <script>replaceAll o'rtadagi <script> ni o'chirdi. Qolgan bo'laklar birlashib, yana <script> ga aylandi! Qidirib-o'chirish usuli bilan himoya qilib bo'lmaydi. Foydalanuvchi matnini sahifaga xavfsiz chiqarishning to'g'ri usuli — escaping. Uning g'oyasini HTML darajasidagi xavfsizlik darsida ko'rgansiz, JavaScript'da to'liq XSS va DOM xavfsizligi darsida o'rganamiz.
10. Ko'p uchraydigan xatolar
10.1 Natijani saqlamaslik
let email = " ali@mail.uz ";
email.trim();
console.log(email.length); // 15trim yangi satr qaytardi, lekin biz uni hech qayerga yozmadik. email avvalgidek bo'sh joylar bilan qoldi. To'g'risi:
let email = " ali@mail.uz ";
email = email.trim();
console.log(email.length); // 11Bu — satr metodlaridagi eng ko'p uchraydigan xato. Ko'pchilik trim() "satrni tozalaydi" deb o'ylaydi. Aslida u tozalangan nusxani beradi.
10.2 Qavsni unutish
const ism = "ali";
console.log(`Salom, ${ism.toUpperCase}`);Konsolda:
Salom, function toUpperCase() { [native code] }Xato chiqmadi, lekin ekranda g'alati yozuv paydo bo'ldi. Qavssiz toUpperCase chaqirilmaydi — template literal metodning o'zini matnga aylantirdi. [native code] — "JavaScript'ning ichki kodi" degani. Ekranda shunday matn ko'rsangiz, qavsni unutgansiz. To'g'risi: ${ism.toUpperCase()}.
10.3 replace hammasini almashtiradi deb o'ylash
const narx = "1 250 000 so'm";
console.log(narx.replace(" ", "")); // 1250 000 so'mBo'sh joylarning faqat birinchisi o'chdi. Hammasini o'chirish kerak bo'lsa — replaceAll(" ", ""). Natijada "1250000so'm" bo'ladi.
10.4 Maydon bo'sh kelsa
let ism;
console.log(ism.trim());TypeError: Cannot read properties of undefined (reading 'trim')Tarjimasi: "undefined ning xususiyatlarini o'qib bo'lmaydi (trim o'qilayotgan edi)". Forma maydoni umuman yuborilmasa, qiymat undefined bo'ladi, unda esa metod yo'q. ?? operatori yordam beradi:
let ism;
console.log((ism ?? "").trim() === ""); // trueism yo'q bo'lsa, bo'sh satr olinadi. trim xavfsiz ishlaydi va natija aniq "bo'sh maydon" bo'ladi.
11. Mashqlar
1-mashq (oson): Natijani oldindan ayting
"Termiz".toUpperCase()→" Nukus ".trim()→"a-b-c".replace("-", "+")→"a-b-c".replaceAll("-", "")→"SHAHRISABZ".toLowerCase()→
Yechim
console.log("Termiz".toUpperCase()); // TERMIZ
console.log(" Nukus ".trim()); // Nukus
console.log("a-b-c".replace("-", "+")); // a+b-c
console.log("a-b-c".replaceAll("-", "")); // abc
console.log("SHAHRISABZ".toLowerCase()); // shahrisabzreplace faqat birinchi tireni almashtirdi, replaceAll esa ikkalasini ham o'chirdi. trim faqat chetdagi bo'sh joylarni olib tashladi.
2-mashq (o'rta): Promokodni tekshirish
Do'konning promokodi — KUZ2026. Mijoz telefonda shunday yozdi:
const kiritilgan = " kuz2026 ";Kiritilgan kodni tozalang (chetdagi bo'sh joylar va harf katta-kichikligi) va promokod bilan solishtiring. Natijaga qarab ternary bilan Chegirma qo'llandi yoki Promokod xato chiqaring.
Ishora: trim() va toUpperCase() ni zanjir qilib, natijani === bilan solishtiring. Promokod — texnik matn, shuning uchun toLocale... kerak emas.
Yechim
const promokod = "KUZ2026";
const kiritilgan = " kuz2026 ";
const toza = kiritilgan.trim().toUpperCase();
const javob = toza === promokod
? "Chegirma qo'llandi"
: "Promokod xato";
console.log(toza); // KUZ2026
console.log(javob); // Chegirma qo'llandiTozalashsiz kiritilgan === promokod false bergan bo'lardi — ham bo'sh joylar, ham kichik harflar farq qiladi.
3-mashq (qiyin): Buyurtma formasini tozalash
Taksi buyurtmasi formasidan shunday ma'lumot keldi:
const ismXom = " mALIKA ";
const telXom = " 90-123-45-67 ";
const manzilXom = "Chilonzor tumani, 12-uy";Tozalab, konsolga chiqaring:
- Ism:
Malika— chetlar tozalangan, birinchi harf katta, qolgani kichik. Ishora: "Hammasi birga" bo'limidagislice(0, 1)usuli. - Telefon:
+998901234567. Ishora: avvaltrim, keyinreplaceAll("-", ""), oxirida boshiga"+998"qo'shing. - Manzil: bo'sh joylarning birinchi ikki qatorini
replaceAll(" ", " ")bilan qisqartiring va natijani chiqaring. NegaChilonzor tumani, 12-uyto'liq chiqmaganini izohlang.
Yechim
const ismXom = " mALIKA ";
const telXom = " 90-123-45-67 ";
const manzilXom = "Chilonzor tumani, 12-uy";
const ism = ismXom.trim();
const bosh = ism.slice(0, 1).toUpperCase();
const tozaIsm = bosh + ism.slice(1).toLowerCase();
const tozaTel = "+998" + telXom.trim().replaceAll("-", "");
const tozaManzil = manzilXom.replaceAll(" ", " ");
console.log(tozaIsm); // Malika
console.log(tozaTel); // +998901234567
console.log(tozaManzil); // Chilonzor tumani, 12-uyIsm va telefon to'liq tozalandi. Manzilda esa "Chilonzor" dan keyin hali ikki bo'sh joy qoldi. U yerda uchta bo'sh joy bor edi: replaceAll birinchi ikkitasini bittaga almashtirdi, uchinchisi yonida qoldi. "tumani," dan keyingi ikki bo'sh joy esa to'g'ri tuzaldi.
Bu "replaceAll ham hamma narsani hal qilmaydi" bo'limidagi muammo. Uni regex hal qiladi — RegExp asoslari darsida qaytamiz.
12. Real ishda
- Ro'yxatdan o'tish va kirish. Email va login doim
trim().toLowerCase()bilan saqlanadi va solishtiriladi. Busiz foydalanuvchilar "parolim to'g'ri, lekin kira olmayapman" deb shikoyat qiladi. - Qidiruv. Onlayn do'kon qidiruvi so'rovni va mahsulot nomini kichik harfga keltirib solishtiradi.
- Telefon raqamlari. SMS xizmatlari (masalan, Eskiz) raqamni faqat raqamlar ko'rinishida qabul qiladi. Formadagi qavs va tirelar yuborishdan oldin olib tashlanadi.
- Shablonlar. Email va SMS matnlaridagi
{ism}kabi joylarreplaceAllbilan haqiqiy qiymatga almashtiriladi.
Real loyihalarda forma tekshiruvi uchun maxsus kutubxonalar ham ishlatiladi (masalan, Zod — kursda alohida o'rganamiz). Ular ichida ham aynan shu trim va toLowerCase ishlaydi.
Intervyuda "replace va replaceAll farqi nima?" va "satr metodlari asl satrni o'zgartiradimi?" savollari ko'p beriladi. Ikkalasiga ham endi aniq javob bera olasiz.
Xulosa
toUpperCasevatoLowerCase— katta va kichik harfga o'tkazadi. Harfsiz solishtirish uchun ikkala tomonni bir xil ko'rinishga keltiring.toLocaleUpperCase("tr")— turkcha qoidalar bilan. Texnik matnda faqattoUpperCase, o'zbekcha matnda hech qachon"tr"emas.trim,trimStart,trimEnd— chetdagi bo'sh joy, tab va yangi qatorlarni olib tashlaydi. O'rtaga tegmaydi.replace— faqat birinchisini,replaceAll— hammasini almashtiradi. O'chirish —""ga almashtirish.concatishlaydi, lekin template literal qulayroq.- Hech bir metod asl satrni o'zgartirmaydi — natijani o'zgaruvchiga saqlang.
Keyingi dars: Unicode va emoji: matn ichki tuzilishi — nega emoji'da length "yolg'on" gapirishini va split("") uni buzib qo'yishini ko'ramiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!