[ Web Proxy ]
URL:
Viewing: https://tr.javascript.info/string [Back]  [Original]

Karakter Dizisi - Strings
TR

Bu ak-kaynakl projenin tm dnyada kullanlabilir olmasn istiyoruz.

Kendi dilinizde eviriye yardm edebilirsiniz!

    Javascript.info'da ara:
    Eitimde ara:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    Karakter Dizisi - Strings

    JavaScript metinsel deerleri karakter dizisi olarak tutar. Bir karakter ile (char) karakter dizisi (string) arasnda bir fark yoktur.

    Karakter dizisi format her zmaan UTF-16dr ve sayfann karakter setine bal deildir.

    Trnak aretleri

    Tekrar hatrlayacak olursanz, Karakter dizisi tek trnak ve ift trnak ile alp kapatlabilir. :

    let tek = 'tek-trnak';
    let cift = "ift-trnak";
    
    let us_isareti = `s iareti`; // Backticks

    Tek ve ift trnak zaten aynyd. s iareti ise JavaScript ifadelerini karakter dizisine yerletirmenizi salar. Bu fonksiyon ars dahil her ey olabilir:

    function toplam(a, b) {
      return a + b;
    }
    
    alert(`1 + 2 = ${toplam(1, 2)}.`); // 1 + 2 = 3.

    s iaretinin dier avantaj ise birka satrdan oluan bir karakter dizisini yazabilmeniz:

    let davetliListesi = `Davetliler:
     * hsan
     * Cemal
     * Muzaffer
    `;
    
    alert(davetliListesi); // birok satrdan oluan davetiye listesi

    Eer yukardaki ekilde tek veya ift trnak kullanmaya kalkarsanz hata alrsnz:

    let davetliListesi = "Davetliler:  // Error: Unexpected token ILLEGAL
      * hsan";

    Tek trnak ve ift trnak dil ilk yazlmaya baland, oklu satrlarn hesaba katlmad zamanlardan kalmadr. Garip trnak ise ( alt + , ) ok sonralar oluturulduundan ok ynldr.

    lk s iareti ncesinde ablon fonksiyonu tanmlanmas da mmkndr. Yazm : func`string` eklindedir. func fonksiyonu otomatik olarak arlr, karakter dizisi ile ve iine gml ifadeyi alr ve altrr. Bunun ile ilgili daha fazla bilgiyi dkmanda bulabilirsiniz. Buna etiketmi ablon (tagged templates) denir. Bu ekilde karakter dizilerini zel temalar ierisinde veya dier fonksiyonlarda kullanmak daha kolay olur, fakat yine de nadiren kullanlrlar.

    zel Karakterler

    yeni satr \n karakterini kullanarak ift trnakl karakter dizisi ierisinde birok satrdan oluan bir metin yazlabilir:

    let davetliListesi = "Davetliler:\n * hsan\n * Cemal\n * Muzaffer";
    
    alert(davetliListesi); // birok satrdan oluan davetiye listesi

    rnein, aadaki iki satrn kts ayn olacaktr:

    alert( "Merhaba\nDnya" ); // "yeni satr" sambol ile iki satr.
    
    // s iareti ile iki satr ( altgr + , )
    alert( `Merhaba
    Dnya` );

    Yeni satr karakterine gre daha az kullanlan zel karakterler bulunmaktadr:

    Karakter Aklama
    \b Backspace
    \f Form feed
    \n Yeni Satr
    \r Carriage return
    \t Tab
    \uNNNN hex kodu ile bir Unicode NNNN, rnein \u00A9 kopyalama hakk iin kullanlan iaret. Kesinlikle 4 basamakl hex deeri olmaldr.
    \u{NNNNNNNN} Baz karakterler nadirde olsa iki Unicode sembol ile ifade edilirler. 4 bytten oluan uzun bir yazm vardr. Karakterlerin ssl parantez iine alnmas gerekmektedir.

    Unicode rnekleri:

    alert( "\u00A9" ); // 
    alert( "\u{20331}" ); // , Uzun bir ince hiyerograf (uzun Unicode)
    alert( "\u{1F60D}"); // , glen yz sembol (uzun Unicode)

    Tm zel karakterler her zaman \ karakteri ile balarlar. Karakterler normal aknda giderken baka bir i yapmas iin var olan ilemi kesmesinden dolay kesme karakteri denebilir

    Karakter dizisi iinde kesme iareti kullanmak istersek bu iaret yardmyla yaparz.

    rnein:

    alert( 'N\'aber canm - Tavan !' ); // N'aber canm - Tavan !

    Grdnz gibi \' kullanarak karakter dizisinin bitmesi engellendi.

    Tabi bu sadece balang karakteri ' ise geerli. Daha dzgn bir zm ift trnak kullanmak olacaktr:

    alert( "N'aber canm - Tavan!" ); // N'aber canm - Tavan!

    Dikkat edeceiniz zere \ JavaScriptin doru okumas amacyladr. Ekranda grnmez.

    Peki gerekten \ gsterilmek istenirse ne yaplmal ?

    Bu da mmkn, bunun iin \\ kullanlmal:

    alert( `\\` ); //  \

    Karakter dizisi uzunluu

    length zellii karakter dizisinin uzunluunu verir.

    alert( `Naber\n`.length ); // 6

    Dikkat ederseniz \n zel karakter olduundan dolay bir karakter olarak tanmland.

    length bir zelliktir

    Genelde baka diller ile alm programclar yanllkla str.length yerine str.length() metodunu armaktadrlar. Byle bir metod yoktur.

    str.length saysal bir deerdir, fonksiyon deildir! Sonunda parantez ap kapanmaz.

    Karakterlere eriim

    stediiniz pozisyondaki karakteri alabilmek iin keli parantez ierisinde pozisyonu neresiyse onu yazn [poz] veya bunun yerine str.charAt(pos) metodunu da kullanabilirsiniz. lk karakter 0. pozisyondur:

    let str = `Selam`;
    
    // ilk karakter
    alert( str[0] ); // S
    alert( str.charAt(0) ); // S
    
    // son karakter
    alert( str[str.length - 1] ); // m

    Keli parantez karakter almann modern yoludur, charAt ilk metodlardandr.

    Aralarndaki tek fark [] eer karakteri bulamaz ise undefined dner. Fakat charAt bo karakter dner:

    let str = `Selam`;
    
    alert( str[1000] ); // undefined
    alert( str.charAt(1000) ); // '' (bo karakter)

    Karakterleri dngye sokmak da mmkndr.

    for(let karakter of "Selam") {
      alert(karakter); // S,e,l,a,m (karakter nce "S", sonra "e", sonra "a" vs)
    }

    Karakterler tanmlandktan sonra deitirilemezler ( immutable )

    JavaScript dilinde karakter dizisi deitirilemez. Mmkn deildir.

    rnek ile aklamak gerekirse:

    let str = 'Selam';
    
    str[0] = 's'; // hata
    alert( str[0] ); // almaz, deiiklik olmaz

    Bunun zm ise yeni bir karakter dizisi atayp stryi buna atamaktr.

    rnein:

    let str = 'Selam';
    
    str = str[0] + 'ELAM' ;  // karakter dizisini tamamen deitir.
    
    alert( str ); // SELAM

    Bir dahaki blmde bunun ile ilgili daha fazla rnee denk geleceksiniz.

    Harf ilemleri

    Kk harfe evirmek iin toLowerCase() ve byk harfe evirmek iin toUpperCase() metodlar kullanlabilir.

    alert( 'Arayz'.toUpperCase() ); // ARAYZ
    alert( 'Arayz'.toLowerCase() ); // arayz

    veya, sadece ba harfini alp kk harf olmasn istiyorsanz istiyorsanz:

    alert( 'Arayz'[0].toLowerCase() ); // 'a'

    Karakter dizisi iinde baka bir karakter arama

    Bunun iin birok yol bulunmaktadr.

    str.indexOf

    lk metod str.indexOf(aranacak_karakterler, pozisyon)

    Aranmak istenen karakter dizisinde str aranacak_karakterleri arar. Pozisyon ile istenen pozisyondan aramaya balar, eer bu karakter dizisini bulursa bulduu pozisyonu, bulamaz ise -1 dndrr.

    rnein:

    let str = "N`aber Canm - Tavan";
    
    alert( str.indexOf("N'aber") ); // 0, nk N`aber balangta
    alert( str.indexOf("n'aber") ); // -1, bulunamad, arama byk/kk harf duyarldr.
    
    alert( str.indexOf("Tavan") ); // 15, "Tavan" 15. pozisyonda bulunmaktadr.

    stee bal olan ikinci parametre aramaya nereden balanacann belirtilmesine yarar.

    rnein "an"'n ilk bulunduu pozisyon 8dir. Bir sonraki denk gelii ise 19. pozisyonda olur.

    let str = "N`aber Canm - Tavan";
    
    alert( str.indexOf('an', 9) ) // 19

    Eer sizin istediiniz tm tekrarlar ise, indexOfu dng ierisinde kullanabilirsiniz. Her yeni ar bir nceki pozisyonu tutar:

    let str = 'Bir berber bir berbere gel birader beraber bir berber dkkan aalm demi';
    
    let hedef = 'bir';
    
    let poz = 0;
    while (true) {
      let bulunanPoz = str.indexOf(hedef, poz);
      if (bulunanPoz == -1) break;
    
      alert( `Bulunan poz: ${bulunanPoz}` );
      poz = bulunanPoz + 1; // bir sonraki pozisyondan aramaya devam et.
    }

    Ayn algoritma aadaki ekilde daha ksa bir biimde yazlabilir:

    let str = 'Bir berber bir berbere gel birader beraber bir berber dkkan aalm demi';
    let hedef = "bir";
    
    
    let poz = -1;
    while ((poz = str.indexOf(hedef, poz + 1)) != -1) {
      alert( poz );
    }
    str.lastIndexOf(poz)

    Buna benzer baka bir metod daha bulunmaktadr. str.lastIndexOf(pos) bu metod karakter dizisinin sonundan bana doru arama yapar

    Bulduklarn da yine tersten yazar.

    indexOftan daha kullanszdr. if koulu olarak aadaki gibi kullanlamaz.

    let str = "Bin berber bir berbere gel birader beraber bir berber dkkan aalm demi";
    
    if (str.lastIndexOf("Bin")) {
        alert("Buldum!"); // almaz!
    }

    Yukardaki alertn almamasnn nedeni str.lastIndexOf("Bin")'in 0 dndrmesidir. ( Bu balangta deeri bulmasna ramen) pozisyon 0 dndnden if bunu false olarak alglar.

    Bundan dolay -1i aadaki gibi kontrol etmek gerekmektedir.

    let str = "Bin berber bir berbere gel birader beraber bir berber dkkan aalm demi";
    
    if (str.indexOf("Bin") != -1) {
        alert("Buldum"); // imdi oldu!
    }
    Bitwise NOT cambazl

    Burada kullanlan [bitwise NOT] cambazldr. (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) ~ operatr. Sayy 32-bit tamsayya evirir.(Eer ondalk blm varsa bunu siler. Tm bitlerin binary(ikili) gsterimlerini tersine evirir.

    32-bit tam saylar iin ~n tam olarak -(n+1)(IEEE-754 formatna gre) demektir.

    rnein:

    alert( ~2 ); // -3,  -(2+1) demektir.
    alert( ~1 ); // -2,  -(1+1) demektir.
    alert( ~0 ); // -1,  -(0+1) demektir.
    alert( ~-1 ); // 0,  -(-1+1) demektir.

    Grdnz zere, ~n, sadece n == -1 olduu durumda 0 demektir.

    Bundan dolay if( ~str.indexOf("...") ) anca indexOf -1 deilse true olur. Dier bir deyile arandan deer bulunmu demektir.

    Daha ksa bir indexOf kullanm da mevcuttur:

    let str = "Bin berber bir berbere gel birader beraber bir berber dkkan aalm demi";
    
    if (~str.indexOf("Bin")) {
      alert( 'Buldum!' ); // alt
    }

    Genelde ok ak olmayan dil zellikleri zerinde cambazlk yaplmas nerilmez. Fakat zellikle bu kod parac eski kodlarn iinde oka gemektedir. Bundan dolay en azndan anlamalsnz.

    Hatrlatma: if (~str.indexOf(...)) eer bulunursa diye okunur

    includes, startsWith, endsWith

    Modern zelliklerin ierisinde str.includes(substr, pos) true/false dndren bir metod bulunmaktadr.

    Eer sadece aradnz karakterlerin var olup olmadn kontrol etmek istiyorsanz ve pozisyonu sizin iin nemli deilse bu metod kullanlabilir:

    alert( "Bin berber bir berbere gel birader beraber bir berber dkkan aalm demi".includes("Bin") ); // true
    
    alert( "Merhaba".includes("Gle Gle") ); // false

    str.includes un istee bal ikinci argman balanacak pozisyonu belirtmenizi salar:

    alert( "birader".includes("ir") ); // true
    alert( "birader".includes("ir", 3) ); // false, 3. pozisyondan sonra `ir` bulunmamaktadr.

    Ayn ekilde str.startsWith ve str.endsWith metodlar syledikleri gibi, aranan karakter dizilerinin balang ve bitilerine bakarlar.

    alert( "birader".startsWith("bir") ); // true, "birader" "bir" ile balar.
    alert( "birader".endsWith("er") );   // true, "birader" "er" ile biter.

    Alt karakter dizisi alma

    Alt karakter dizisi alma JavaScriptte 3 metod ile yaplr: substring, substr ve slice

    str.slice(basla [, bitir])

    Karakter dizisinin bala ile balayan bitir (dahil deil) ile bitirilen aralktaki karakterleri alr.

    rnein:

    let str = "stringify";
    alert( str.slice(0,5) ); // 'strin',  0 ile 5 arasndaki alt karakter dizisi (5 dahil deil)
    alert( str.slice(0,1) ); // 's', 0 ile 1, fakat 1 dahil deil, yani sadece 0'nc karakter.

    Eer ikinci bir argman yoksa, slice karakter dizisinin sonuna kadar alr:

    let str = "stringify";
    alert( str.slice(2) ); // ringify, ikinci pozisyondan sonuna kadar.

    basla/bitir iin negatif deerler kullanmakta mmkndr. Bu pozisyonun karakter bitiminden itibaren alt anlamna gelir.

    let str = "stringify";
    
    // sadan 4. pozisyondan bala ve yine sadan 1. pozisyona kadar al.
    alert( str.slice(-4, -1) ); // gif
    str.substring(basla [, bitir])

    bala ile bitir arasndaki karakterleri evirir.

    rnein:

    let str = "stringify";
    
    // alt karakter dizisi iin ayndr.
    alert( str.substring(2, 6) ); // "ring"
    alert( str.substring(6, 2) ); // "ring"
    
    // ...fakat slice iin farkldr:
    alert( str.slice(2, 6) ); // "ring" (ayn)
    alert( str.slice(6, 2) ); // "" (bo karakter)

    slicea gre farkl olarak negatif saylar 0 olarak hesaba katlr.

    str.substr(balang [, length])

    Verilen uzunlua bal olarak balangtan uzunluk kadar karakter alr.

    Dier metoda gre bu uzunluu belirtmemizi salar. Dierleri pozisyonu belirtmemizi salyordu.

    let str = "stringify";
    alert( str.substr(2, 4) ); // ring, 2. pozisyondan 4 karakter al.

    lk karakter negatif olabilir. Sondan sayarak:

    let str = "stringify";
    alert( str.substr(-4, 2) ); // gi, 4. pozisyondan 2 karakter al.

    Karkl nlemek adna metodlarn zerinden geersek:

    method selects negatives
    slice(balang, biti) balangdan bitie kadar negatif saylar kullanlabilir.
    substring(balang, biti) balangdan bitie kadar negatif saylar 0 demektir
    substr(balang, uzunluk) balangdan uzunluk kadar karakter negatif balang kullanlabilir
    Hangisi Seilmeli?

    Aslnda tamam i grr. Daha resmi dzeyde baklrsa: substr JavaScript zellik tanmlarnda bulunmamaktadr. Fakat Annex Bye gre sadece tarayc tabanl zellikler ierisinde bulunmaktadr. Bu da tarihi nedenlerden dolaydr. Bundan dolay tarayc zerine yazmyorsanz. Yazdnz yere bal olarak bu kod hata verebilir. Fakat pratikte her yerde alt grlebilir.

    Yazar genelde slice kullanmaktadr.

    Karakterlerin karlatrlmas

    Karlatrmalar blmnden hatrlanaca zere, karakterler birbirileri ile karakter karakter karlatrlrlar. Bu karlatrma alfabetik sraya gre yaplmaktadr.

    Buna ramen baz gariplikler de mevcuttur.

    1. Kk harf karakterler her zaman byk harflerden byktrler.

      alert( 'a' > 'Z' ); // true
    2. Blgesel karakterler bu sralamaya girmezler. Yani karlatrlamazlar.

      alert( 'sterreich' > 'Zealand' ); // true

      Eer lke isimlerini karlatrmak istiyorsanz bu garip sonulara neden olabilir. rnein Zealand normalde sterreichten sonra gelmesi beklenirken nce gelir.

    Ne olduunu anlamak iin JavaScript karakter dizilerini nasl tanmlyor buna bakmak lazm.

    Tk karakter dizileri UTF-16 ile kodlanmtr. Buna gre: Tm karakterler saysal olarak kodlanr. Bu koda gre karakteri geri dndrecek zel metodlar mevcuttur.

    str.codePointAt(pos)

    Verilen pozisyondaki karakterin kodunu dndrr:

    // Byk kk harflerde farkl kodlar dndrlr.
    alert( "z".codePointAt(0) ); // 122
    alert( "Z".codePointAt(0) ); // 90
    String.fromCodePoint(code)

    Saysal deere gre karakter dndrr.

    alert( String.fromCodePoint(90) ); // Z

    Ayrca \u ile birlikte kodun hexa decimal deerini kullanarak Unicode karakter eklemeniz de mmkndr:

    // 90 hexa decimal sistemde 5a ya denk gelmektedir.
    alert( '\u005a' ); // Z

    65..220 arasnda saysal deeri olan (Latin alfabesi ve bunun yannda saylar vs.) karakterleri ekrana basalm:

    let str = '';
    
    for (let i = 65; i <= 220; i++) {
      str += String.fromCodePoint(i);
    }
    alert( str );
    // ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
    // 

    Grdnz gibi nce byk harfler, sonrasnda birka zel harf ve kk harfler eklinde yazlmaktadr.

    a > Z olduu yukarda aka grlmektedir.

    Karakterler saysal kodlar ile karlatrlmaktadr. Kod bydke karakter de byr denebilir. a iin yazlan kod (97) Z(90) kodundan byktr.

    • Tk kk harfler byk harflerden sonra gelir. Bundan dolay kk harflerin en k bile byk harflerin tamamndan byktr.
    • gibi karakterler alfabeden tamamen farkl dnmelidir. Bu karakterlerin kodlar kk harflerden byktr.

    Doru Karlatrma

    Karakter karlatrmasn doru olarak yapmak grndnden daha zordur. nk alfabe dilden dile farkllk gstermektedir. Ayn grnl harfler farkl alfabelerde farkl yerlerde yer alrlar.

    Tarayc hangi dil ile karlatracan bilmeli.

    Neyse ki tm modern tarayclar(IE10- ek ktphanelere gerek duymaktadr Intl.JS ) uluslararas dil standardna sahiptir ECMA 402.

    Bu zel bir metod ile farkl dillerde karakterlerin birbirleri ile karlatrlabilmesini salar. Kurallar u ekildedir:

    str.localeCompare(str2) in arlmas:

    • Eer dil kurallarna gre str str2 den bykse 1 dndrr.
    • Eer str str2 den kkse -1 dndrr.
    • Eer birbirleri ile eit ise 0 dndrr.

    rnein:

    alert( 'sterreich'.localeCompare('Zealand') ); // -1

    Aslnda bu metodun dkmantasyonda belirtilen iki tane argman vardr. Bu argmanlar ile hangi dili kullanmak istediinizi veya "a" ile "a"'nn ayn ekilde davranlmasn isteyip istemediinizi belirtebilirsiniz.

    Unicode ve Internaller.

    leri derecede bilgiler

    Bu blmde karakter dizilerinin daha derin zelliklerine deinilecektir. Bu bilgiler emoji, hiyeroglif veya matematiksel ifadelerde yardmc olur.

    Eer bu konuda bir ihtiyacnz yoksa bu blm atlayabilirsiniz.

    Vekil iftler

    ou sembol 2-byte kod ile tanmlanr. ou Avrupa dili, saylar ve ou hiyeroglifler iki byte ile tanmlanabilir.

    Fakat iki byte 65536 sembol tanmlayabilir ve tm semboller iin bu yeterli deildir. Bundan dolay nadir semboller bir ift 2-bytelk karakter ile tanmlanr. Buna vekil iftler veya surrogate pair ad verilir.

    Byle sembollerin uzunluu 2dir:

    alert( ''.length ); // 2, Matematiksel komut byk X
    alert( ''.length ); // 2, Sevinten alama emojisi
    alert( ''.length ); // 2, nadir bir in hiyeroglifi

    Bu vekil iftler JavaScript yaratldnda meydanda yoktu, bundan dolay dil tarafndan doru olarak ilenemez.

    Tek bir karakter olmasna ramen length (uzunluk) 2 gstermektedir.

    String.fromCodePoint ve str.codePointAt az bilinen ve bu ikili karakterlerle uraan iki metoddur. Dile entegreleri yakn zamanda gerekleti. Bundan nce sadece String.fromCharCode ve str.charCodeAt bulunmaktadr. Bu metodlar aslnda fromCodePoint/codePointAt ile ayndr fakat ikili karakterler ile almamaktadrlar.

    rnein semboln alnmas biraz karmaktr, nk bu iftler iki karakterden olumaktadrlar.

    alert( ''[0] ); // garip semboller...
    alert( ''[1] ); // ...her biri ikilinin paralar

    Dikkat ederseniz iftli karakterler tek balarna bir ey ifade etmezler. Yani yukardaki rnekler aslnda hibir ie yaramaz.

    Teknik olarak, bu iftler kodlarna baklarak ayrt edilebilir: Eer bir karakter 0xd800..0xdbff aralnda ise bu iftin ilk karakteri demektir. kinci karakter ise 0xd800..0xdbff aralnda olmaldr. Bu aralklar zel olarak iftler iin ayrlmtr.

    Yukardaki duruma gre:

    // charCodeAt iftlere uygun deildir, bundan dolay sadece kodlar verilir.
    
    alert( ''.charCodeAt(0).toString(16) ); // d835, 0xd800 ile 0xdbff arasnda
    alert( ''.charCodeAt(1).toString(16) ); // dcb3, 0xdc00 ile 0xdfff arasnda

    Sral eriim ( Iterable ) blmnde bu iftler ile ilgili daha fazla bilgi bulabilirsiniz. Muhtemelen bunun ile ilgili ktphaneler de vardr, fakat burada nerecek kadar mehur olan yok henz.

    Aksan iaretleri ve normalletirme

    ou dilde temel karakterlerin altna veya stn sembol eklenerek oluturulmu yeni karakterler mevcuttur.

    rnein a, eklinde karakterlere sahiptir. Bu birleik karakterler UTF-16 tablosunda kendine has kodlara sahiptir. Hepsi deil tabi fakat ou birleik karakter bu tabloda yer alr.

    Elle bu karakterleri birletirmek iin, UTF-16 baz Unicode karakter kullanmamza olanak verir. Bylece temel karakterin zerine bir veya daha fazla iaret eklenerek yeni bir karakter retilebilir

    rnein, S harfinin stne nokta eklemek isterseniz \u0307 kullanabilirsiniz. Bunu kullandnzda S elde etmi olursunuz.

    alert( 'S\u0307' ); // S

    Eer bu karakterin stne veya altna farkl iaretler eklemek istiyorsanz gerekli karakterleri istediiniz gibi ekleyebilirsiniz.

    rnein, eer aa nokta kodunu ( \u0323) eklerseniz, Sin altna ve stne nokta demi olursunuz ve u ekilde bir karakter elde edersiniz: S

    rnein:

    alert( 'S\u0307\u0323' ); // S

    Bylece ok farkl karakterler elde etmek mmkndr, fakat bu bir probleme neden olmaktadr: iki karakter grnte birbiri ile ayn olabilir, fakat iki farkl Unicodea sahip olabilir.

    rnein:

    alert( 'S\u0307\u0323' ); // S, S + st nokta + alt nokta
    alert( 'S\u0323\u0307' ); // S, S + alt nokta + st nokta
    
    alert( 'S\u0307\u0323' == 'S\u0323\u0307' ); // false

    Bunu zebilmek iin Unicode normalletirme algoritmalar mevcuttur. Bu karakterleri tek bir noram forma evirir.

    str.normalize() eklinde uygulamas yaplmaktadr.

    alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true

    Bizim durumumuzda normalize() fonksiyonu aslnda 3 karakteri tek bir karakter haline getirir: \u1e68 ( alt ve st nokta ile S harfi)

    alert( "S\u0307\u0323".normalize().length ); // 1
    
    alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true

    Gerekte bu durumla ok nadir karlalr. Bu karakter bile S olduka yaygn olduundan, UTF-16 standart tablosu ierisinde yer almaktadr.

    Eer normalizasyon kurallarn ve tiplerini daha derinlemesine renmek istiyorsanz Unicode Normalization Forms adresinden inceleyebilirsiniz. Pratikte yukarda verilen bilgiler yeterli olacaktr.

    zet

    • 3 tip trnak bulunmaktadr. ` iareti ile birka satrdan oluan karakter dizisi yazmak mmkndr.
    • JavaScriptte karakterler UTF-16 ile kodlanmtr.
    • \n gibi zel karakterler veya \u.. ile Unicode kullanlabilir.
    • Karakteri almak iin: [] kullanlr.
    • Alt karakter kmesi almak iin slice veya substring kullanlr.
    • Kk/byk harf deiimi iin: toLowerCase/toUpperCase.
    • Alt karakter dizisi aramak iin : indexOf veya includes/startsWith/endsWith kullanlabilir.
    • Karakterleri dile gre karlatrmak iin localceCompare kullanlabilir. Dier trl karakterler kodlarna gre karlatrlrlar.

    Bunun yannda karakter dizileri iin daha baka yardmc metodlar bulunmaktadr:

    • str.trim() balang ve bititeki boluklar siler.
    • str.repeat(n) stryi istendii kadar tekrar eder.
    • Daha fazlas iin manual adresine bakabilirsiniz.

    Karakter dizileri bunun yannda arama/deitirme veya regular expression iin metodlar barndrmaktadr. Fakat bu konular ayr blmleri hak etmektedir. Bu konulara ilerleyen blmlerde dnlecektir.

    Grevler

    nem: 5

    ucFirst(str) adnda bir fonksiyon yazn bu fonksiyon verilen str deikeninin ilk karakterini byk harf yapp dnsn, rnein:

    ucFirst("ahmet") == "Ahmet";

    Testler ile korunakl olan a.

    zm

    lk karakteri deitiremeyiz nk JavaScriptte karakter dizileri deitirilemez.

    Fakat var olan ile yeni bir karakter dizisi yapmak ve ilk karakteri byk balamak mmkndr:

    let yeniDizi = str[0].toUpperCase() + str.slice(1);

    Burada kk bir problem var. Eer str bo ise, str[0] undefined olur ve hata dner.

    Bunun iki trl zm bulunmaktadr.

    1. str.charAt(0), kullanarak ilk satrdaki karakteri kontrol etmek.
    2. Bo karakterler iin kontrol yazmak

    kinci tr ise:

    function ucFirst(str) {
      if (!str) return str;
    
      return str[0].toUpperCase() + str.slice(1);
    }
    
    alert( ucFirst("ahmet") ); // Ahmet
    function ucFirst(str) {
      if (!str) return str;
    
      return str[0].toUpperCase() + str.slice(1);
    }

    zm testler korunakl alanda olacak ekilde a.

    nem: 5

    checkSpam(str) adnda bir fonksiyon yazn ve bu eer str viagra veya XXX gibi deerler alrsa true dier hallerda false dndermesi lazm.

    Fonksiyon byk kk harf duyarsz olmas gerekmektedir:

    checkSpam('buy ViAgRA now') == true
    checkSpam('free xxxxx') == true
    checkSpam("innocent rabbit") == false

    Testler ile korunakl olan a.

    zm

    Byk kk harf duyarsz yapabilmek iin nce tm harfleri kk harfe evirebilir ve sonra arayabilirsiniz:

    function checkSpam(str) {
      let lowerStr = str.toLowerCase();
    
      return lowerStr.includes('viagra') || lowerStr.includes('xxx');
    }
    
    alert( checkSpam('buy ViAgRA now') );
    alert( checkSpam('free xxxxx') );
    alert( checkSpam("innocent rabbit") );
    function checkSpam(str) {
      let lowerStr = str.toLowerCase();
    
      return lowerStr.includes('viagra') || lowerStr.includes('xxx');
    }

    zm testler korunakl alanda olacak ekilde a.

    nem: 5

    truncate(str, maxlength) fonksiyonu strnin uzunluunu kontrol eder. Eer maxlengthden uzunsa str nin sonunu "..." ile bitirir ve uzunluunu maxlengthe kadar getirir.

    Fonksiyonun sonucunda eer gerekliyse metin kesilmelidir.

    rnein:

    truncate("Size bu konuda sylemek istediim ey:", 20) = "Size bu konuda s..."
    
    truncate("Merhaba!", 20) = "Merhaba!"

    Testler ile korunakl olan a.

    zm

    Maksimum uzunluk maxlength olacandan dolay ... iin de yer ayrmakta fayda var.

    Note that there is actually a single unicode character for an ellipsis. Thats not three dots.

    function truncate(str, maxlength) {
      return (str.length > maxlength) ?
        str.slice(0, maxlength - 3) + '...' : str;
    }
    function truncate(str, maxlength) {
      return (str.length > maxlength) ?
        str.slice(0, maxlength - 1) + '' : str;
    }

    zm testler korunakl alanda olacak ekilde a.

    nem: 4

    Formda "$120" cret bulunmaktadr. nce dolar iareti ardndan say gelmektedir.

    yle bir fonksiyon yazn ki extractCurrencyValue(str) bu fonksiyon sadece saysal deeri dndersin.

    rnek:

    alert( extractCurrencyValue('$120') === 120 ); // true

    Testler ile korunakl olan a.

    zm
    function extractCurrencyValue(str) {
      return +str.slice(1);
    }

    zm testler korunakl alanda olacak ekilde a.

    Eitim haritas

    Yorumlar

    yorum yapmadan nce ltfen okuyun...
    • Eer gelitirme ile alakal bir neriniz var ise yorum yerine github konusu gnderiniz.
    • Eer makalede bir yeri anlamadysanz ltfen belirtiniz.
    • Koda birka satr eklemek iin <code> kullannz, birka satr eklemek iin ise <pre> kullann. Eer 10 satrdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)

    Web Proxy Viewer  |  New URL  |  Original Page