JavaScript metinsel deÄerleri karakter dizisi olarak tutar. Bir karakter ile (char) karakter dizisi (string) arasında bir fark yoktur.
Karakter dizisi formatı her zmaan UTF-16âdır ve sayfanın karakter setine baÄlı deÄildir.
Tırnak İÅaretleri
Tekrar hatırlayacak olursanız, Karakter dizisi tek tırnak ve çift tırnak ile açılıp kapatılabilir. :
let tek = 'tek-tırnak';
let cift = "çift-tırnak";
let us_isareti = `üs iÅareti`; // Backticks
Tek ve çift tırnak zaten aynıydı. Ãs iÅareti ise JavaScript ifadelerini karakter dizisine yerleÅtirmenizi saÄlar. Bu fonksiyon çaÄrısı dahil her Åey olabilir:
function toplam(a, b) {
return a + b;
}
alert(`1 + 2 = ${toplam(1, 2)}.`); // 1 + 2 = 3.
Ãs iÅaretinin diÄer avantajı ise birkaç satırdan oluÅan bir karakter dizisini yazabilmeniz:
let davetliListesi = `Davetliler:
* İhsan
* Cemal
* Muzaffer
`;
alert(davetliListesi); // birçok satırdan oluÅan davetiye listesi
EÄer yukarıdaki Åekilde tek veya çift tırnak kullanmaya kalkarsanız hata alırsınız:
let davetliListesi = "Davetliler: // Error: Unexpected token ILLEGAL
* İhsan";
Tek tırnak ve çift tırnak dil ilk yazılmaya baÅlandıÄı, çoklu satırların hesaba katılmadıÄı zamanlardan kalmadır. Garip tırnak ise ( alt + , ) çok sonraları oluÅturulduÄundan çok yönlüdür.
İlk üs iÅareti öncesinde âÅablon fonksiyonuâ tanımlanması da mümkündür. Yazımı : func`string` Åeklindedir. func fonksiyonu otomatik olarak çaÄrılır, karakter dizisi ile ve içine gömülü ifadeyi alır ve çalıÅtırır. Bunun ile ilgili daha fazla bilgiyi dökümanda bulabilirsiniz. Buna âetiketmiÅ Åablonâ (tagged templates) denir. Bu Åekilde karakter dizilerini özel temalar içerisinde veya diÄer fonksiyonlarda kullanmak daha kolay olur, fakat yine de nadiren kullanılırlar.
Ãzel Karakterler
âyeni satırâ \n karakterini kullanarak çift tırnaklı karakter dizisi içerisinde birçok satırdan oluÅan bir metin yazılabilir:
let davetliListesi = "Davetliler:\n * İhsan\n * Cemal\n * Muzaffer";
alert(davetliListesi); // birçok satırdan oluÅan davetiye listesi
ÃrneÄin, aÅaÄıdaki iki satırın çıktısı aynı olacaktır:
alert( "Merhaba\nDünya" ); // "yeni satır" sambolü ile iki satır.
// üs iÅareti ile iki satır ( altgr + , )
alert( `Merhaba
Dünya` );
âYeni satırâ karakterine göre daha az kullanılan âözelâ karakterler bulunmaktadır:
| Karakter | Açıklama |
|---|---|
\b |
Backspace |
\f |
Form feed |
\n |
Yeni Satır |
\r |
Carriage return |
\t |
Tab |
\uNNNN |
hex kodu ile bir Unicode NNNN, örneÄin \u00A9 â © kopyalama hakkı için kullanılan iÅaret. Kesinlikle 4 basamaklı hex deÄeri olmalıdır. |
\u{NNNNNNNN} |
Bazı karakterler nadirde olsa iki Unicode sembolü ile ifade edilirler. 4 bytten oluÅan uzun bir yazımı vardır. Karakterlerin süslü parantez içine alınması gerekmektedir. |
Unicode örnekleri:
alert( "\u00A9" ); // ©
alert( "\u{20331}" ); // 佫, Uzun bir çince hiyerograf (uzun Unicode)
alert( "\u{1F60D}"); // ð, gülen yüz sembolü (uzun Unicode)
Tüm özel karakterler her zaman \ karakteri ile baÅlarlar. Karakterler normal akıÅında giderken baÅka bir iÅ yapması için var olan iÅlemi kesmesinden dolayı âkesme karakteriâ denebilirâ¦
Karakter dizisi içinde kesme iÅareti kullanmak istersek bu iÅaret yardımıyla yaparız.
ÃrneÄin:
alert( 'N\'aber canım - TavÅan !' ); // N'aber canım - TavÅan !
GördüÄünüz gibi \' kullanarak karakter dizisinin bitmesi engellendi.
Tabi bu sadece baÅlangıç karakteri ' ise geçerli. Daha düzgün bir çözüm çift tırnak kullanmak olacaktır:
alert( "N'aber canım - TavÅan!" ); // N'aber canım - TavÅan!
Dikkat edeceÄiniz üzere \ JavaScriptâin doÄru okuması amacıyladır. Ekranda görünmez.
Peki gerçekten \ gösterilmek istenirse ne yapılmalı ?
Bu da mümkün, bunun için \\ kullanılmalı:
alert( `\\` ); // \
Karakter dizisi uzunluÄu
length özelliÄi karakter dizisinin uzunluÄunu verir.
alert( `Naber\n`.length ); // 6
Dikkat ederseniz \n âözel karakterâ olduÄundan dolayı bir karakter olarak tanımlandı.
length bir özelliktirGenelde baÅka diller ile çalıÅmıŠprogramcılar yanlıÅlıkla str.length yerine str.length() metodunu çaÄırmaktadırlar. Böyle bir metod yoktur.
str.length sayısal bir deÄerdir, fonksiyon deÄildir! Sonunda parantez açıp kapanmaz.
Karakterlere eriÅim
İstediÄiniz pozisyondaki karakteri alabilmek için köÅeli parantez içerisinde pozisyonu neresiyse onu yazın [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
KöÅeli parantez karakter almanın modern yoludur, charAt ilk metodlardandır.
Aralarındaki tek fark [] eÄer karakteri bulamaz ise undefined döner. Fakat charAt boÅ karakter döner:
let str = `Selam`;
alert( str[1000] ); // undefined
alert( str.charAt(1000) ); // '' (boÅ karakter)
Karakterleri döngüye sokmak da mümkündür.
for(let karakter of "Selam") {
alert(karakter); // S,e,l,a,m (karakter önce "S", sonra "e", sonra "a" vs)
}
Karakterler tanımlandıktan sonra deÄiÅtirilemezler ( immutable )
JavaScript dilinde karakter dizisi deÄiÅtirilemez. Mümkün deÄildir.
Ãrnek ile açıklamak gerekirse:
let str = 'Selam';
str[0] = 's'; // hata
alert( str[0] ); // çalıÅmaz, deÄiÅiklik olmaz
Bunun çüzümü ise yeni bir karakter dizisi atayıp strâyi buna atamaktır.
ÃrneÄin:
let str = 'Selam';
str = str[0] + 'ELAM' ; // karakter dizisini tamamen deÄiÅtir.
alert( str ); // SELAM
Bir dahaki bölümde bunun ile ilgili daha fazla örneÄe denk geleceksiniz.
Harf iÅlemleri
Küçük harfe çevirmek için toLowerCase() ve büyük harfe çevirmek için toUpperCase() metodları kullanılabilir.
alert( 'Arayüz'.toUpperCase() ); // ARAYÃZ
alert( 'Arayüz'.toLowerCase() ); // arayüz
veya, sadece baŠharfini alıp küçük harf olmasını istiyorsanız istiyorsanız:
alert( 'Arayüz'[0].toLowerCase() ); // 'a'
Karakter dizisi içinde baÅka bir karakter arama
Bunun için birçok yol bulunmaktadır.
str.indexOf
İlk metod str.indexOf(aranacak_karakterler, pozisyon)
Aranmak istenen karakter dizisinde str aranacak_karakterlerâi arar. Pozisyon ile istenen pozisyondan aramaya baÅlar, eÄer bu karakter dizisini bulursa bulduÄu pozisyonu, bulamaz ise -1 döndürür.
ÃrneÄin:
let str = "N`aber Canım - TavÅan";
alert( str.indexOf("N'aber") ); // 0, çünkü N`aber baÅlangıçta
alert( str.indexOf("n'aber") ); // -1, bulunamadı, arama büyük/küçük harf duyarlıdır.
alert( str.indexOf("TavÅan") ); // 15, "TavÅan" 15. pozisyonda bulunmaktadır.
İsteÄe baÄlı olan ikinci parametre aramaya nereden baÅlanacaÄının belirtilmesine yarar.
ÃrneÄin "an"'ın ilk bulunduÄu pozisyon 8âdir. Bir sonraki denk geliÅi ise 19. pozisyonda olur.
let str = "N`aber Canım - TavÅan";
alert( str.indexOf('an', 9) ) // 19
EÄer sizin istediÄiniz tüm tekrarlar ise, indexOfâu döngü içerisinde kullanabilirsiniz. Her yeni çaÄrı bir önceki pozisyonu tutar:
let str = 'Bir berber bir berbere gel birader beraber bir berber dükkanı açalım 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 aÅaÄıdaki Åekilde daha kısa bir biçimde yazılabilir:
let str = 'Bir berber bir berbere gel birader beraber bir berber dükkanı açalım demiÅ';
let hedef = "bir";
let poz = -1;
while ((poz = str.indexOf(hedef, poz + 1)) != -1) {
alert( poz );
}
str.lastIndexOf(poz)Buna benzer baÅka bir metod daha bulunmaktadır. str.lastIndexOf(pos) bu metod karakter dizisinin sonundan baÅına doÄru arama yapar
Bulduklarını da yine tersten yazar.
indexOfâtan daha kullanıÅsızdır. if koÅulu olarak aÅaÄıdaki gibi kullanılamaz.
let str = "Bin berber bir berbere gel birader beraber bir berber dükkanı açalım demiÅ";
if (str.lastIndexOf("Bin")) {
alert("Buldum!"); // çalıÅmaz!
}
Yukarıdaki alertâün çalıÅmamasının nedeni str.lastIndexOf("Bin")'in 0 döndürmesidir. ( Bu baÅlangıçta deÄeri bulmasına raÄmen) pozisyon 0 döndüÄünden if bunu false olarak algılar.
Bundan dolayı -1âi aÅaÄıdaki gibi kontrol etmek gerekmektedir.
let str = "Bin berber bir berbere gel birader beraber bir berber dükkanı açalım demiÅ";
if (str.indexOf("Bin") != -1) {
alert("Buldum"); // Åimdi oldu!
}
Burada kullanılan [bitwise NOT] cambazlıÄıdır.
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) ~ operatörü. Sayıyı 32-bit tamsayıya çevirir.(EÄer ondalık bölümü varsa bunu siler. Tüm bitlerin binary(ikili) gösterimlerini tersine çevirir.
32-bit tam sayılar için ~n tam olarak -(n+1)(IEEE-754 formatına göre) demektir.
ÃrneÄin:
alert( ~2 ); // -3, -(2+1) demektir.
alert( ~1 ); // -2, -(1+1) demektir.
alert( ~0 ); // -1, -(0+1) demektir.
alert( ~-1 ); // 0, -(-1+1) demektir.
GördüÄünüz üzere, ~n, sadece n == -1 olduÄu durumda 0 demektir.
Bundan dolayı if( ~str.indexOf("...") ) anca indexOf -1 deÄilse true olur. DiÄer bir deyiÅle arandan deÄer bulunmuÅ demektir.
Daha kısa bir indexOf kullanımı da mevcuttur:
let str = "Bin berber bir berbere gel birader beraber bir berber dükkanı açalım demiÅ";
if (~str.indexOf("Bin")) {
alert( 'Buldum!' ); // ÃalıÅtı
}
Genelde çok açık olmayan dil özellikleri üzerinde cambazlık yapılması önerilmez. Fakat özellikle bu kod parçacıÄı eski kodların içinde çokça geçmektedir. Bundan dolayı en azından anlamalısınız.
Hatırlatma: if (~str.indexOf(...)) âeÄer bulunursaâ diye okunurâ¦
includes, startsWith, endsWith
Modern özelliklerin içerisinde str.includes(substr, pos) true/false döndüren bir metod bulunmaktadır.
EÄer sadece aradıÄınız karakterlerin var olup olmadıÄını kontrol etmek istiyorsanız ve pozisyonu sizin için önemli deÄilse bu metod kullanılabilir:
alert( "Bin berber bir berbere gel birader beraber bir berber dükkanı açalım demiÅ".includes("Bin") ); // true
alert( "Merhaba".includes("Güle Güle") ); // false
str.includes un isteÄe baÄlı ikinci argümanı baÅlanacak pozisyonu belirtmenizi saÄlar:
alert( "birader".includes("ir") ); // true
alert( "birader".includes("ir", 3) ); // false, 3. pozisyondan sonra `ir` bulunmamaktadır.
Aynı Åekilde str.startsWith ve str.endsWith metodları söyledikleri gibi, aranan karakter dizilerinin baÅlangıç ve bitiÅlerine bakarlar.
alert( "birader".startsWith("bir") ); // true, "birader" "bir" ile baÅlar.
alert( "birader".endsWith("er") ); // true, "birader" "er" ile biter.
Alt karakter dizisi alma
Alt karakter dizisi alma JavaScriptâte 3 metod ile yapılır: substring, substr ve slice
str.slice(basla [, bitir])-
Karakter dizisinin
baÅlaile baÅlayanbitir(dahil deÄil) ile bitirilen aralıktaki karakterleri alır.ÃrneÄin:
let str = "stringify"; alert( str.slice(0,5) ); // 'strin', 0 ile 5 arasındaki alt karakter dizisi (5 dahil deÄil) alert( str.slice(0,1) ); // 's', 0 ile 1, fakat 1 dahil deÄil, yani sadece 0'ıncı karakter.EÄer ikinci bir argüman yoksa,
slicekarakter dizisinin sonuna kadar alır:let str = "stringify"; alert( str.slice(2) ); // ringify, ikinci pozisyondan sonuna kadar.basla/bitiriçin negatif deÄerler kullanmakta mümkündür. Bu pozisyonun karakter bitiminden itibaren çalıÅtıÄı anlamına gelir.let str = "stringify"; // saÄdan 4. pozisyondan baÅla ve yine saÄdan 1. pozisyona kadar al. alert( str.slice(-4, -1) ); // gif str.substring(basla [, bitir])-
baÅlailebitirarasındaki karakterleri çevirir.ÃrneÄin:
let str = "stringify"; // alt karakter dizisi için aynıdır. alert( str.substring(2, 6) ); // "ring" alert( str.substring(6, 2) ); // "ring" // ...fakat slice için farklıdır: alert( str.slice(2, 6) ); // "ring" (aynı) alert( str.slice(6, 2) ); // "" (boÅ karakter)sliceâa göre farklı olarak negatif sayılar0olarak hesaba katılır. str.substr(baÅlangıç [, length])-
Verilen uzunluÄa baÄlı olarak
baÅlangıçâtan uzunluk kadar karakter alır.DiÄer metoda göre bu
uzunluÄubelirtmemizi saÄlar. DiÄerleri pozisyonu belirtmemizi saÄlıyordu.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.
KarıÅıklıÄı önlemek adına metodların üzerinden geçersek:
| method | selects⦠| negatives |
|---|---|---|
slice(baÅlangıç, bitiÅ) |
baÅlangıçâdan bitiÅâe kadar |
negatif sayılar kullanılabilir. |
substring(baÅlangıç, bitiÅ) |
baÅlangıçâdan bitiÅâe kadar |
negatif sayılar 0 demektir |
substr(baÅlangıç, uzunluk) |
baÅlangıçâdan uzunluk kadar karakter |
negatif baÅlangıç kullanılabilir |
Aslında tamamı iÅ görür. Daha resmi düzeyde bakılırsa: substr JavaScript özellik tanımlarında bulunmamaktadır. Fakat Annex Bâye göre sadece tarayıcı tabanlı özellikler içerisinde bulunmaktadır. Bu da tarihi nedenlerden dolayıdır. Bundan dolayı tarayıcı üzerine yazmıyorsanız. YazdıÄınız yere baÄlı olarak bu kod hata verebilir. Fakat pratikte her yerde çalıÅtıÄı görülebilir.
Yazar genelde slice kullanmaktadır.
Karakterlerin karÅılaÅtırılması
KarÅılaÅtırmalar bölümünden hatırlanacaÄı üzere, karakterler birbirileri ile karakter karakter karÅılaÅtırılırlar. Bu karÅılaÅtırma alfabetik sıraya göre yapılmaktadır.
Buna raÄmen bazı gariplikler de mevcuttur.
-
Küçük harf karakterler her zaman büyük harflerden büyüktürler.
alert( 'a' > 'Z' ); // true -
Bölgesel karakterler bu sıralamaya girmezler. Yani karÅılaÅtırılamazlar.
alert( 'Ãsterreich' > 'Zealand' ); // trueEÄer ülke isimlerini karÅılaÅtırmak istiyorsanız bu garip sonuçlara neden olabilir. ÃrneÄin
ZealandnormaldeÃsterreichâten sonra gelmesi beklenirken önce gelir.
Ne olduÄunu anlamak için JavaScript karakter dizilerini nasıl tanımlıyor buna bakmak lazım.
Tük karakter dizileri UTF-16 ile kodlanmıÅtır. Buna göre: Tüm karakterler sayısal olarak kodlanır. Bu koda göre karakteri geri döndürecek özel metodlar mevcuttur.
str.codePointAt(pos)-
Verilen pozisyondaki karakterin kodunu döndürür:
// Büyük küçük harflerde farklı kodlar döndürülür. alert( "z".codePointAt(0) ); // 122 alert( "Z".codePointAt(0) ); // 90 String.fromCodePoint(code)-
Sayısal deÄere göre karakter döndürür.
alert( String.fromCodePoint(90) ); // ZAyrıca
\uile birlikte kodun hexa decimal deÄerini kullanarak Unicode karakter eklemeniz de mümkündür:// 90 hexa decimal sistemde 5a ya denk gelmektedir. alert( '\u005a' ); // Z
65..220 arasında sayısal deÄeri olan (Latin alfabesi ve bunun yanında sayılar vs.) karakterleri ekrana basalım:
let str = '';
for (let i = 65; i <= 220; i++) {
str += String.fromCodePoint(i);
}
alert( str );
// ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÂÂÂÂ
// ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
GördüÄünüz gibi önce büyük harfler, sonrasında birkaç özel harf ve küçük harfler Åeklinde yazılmaktadır.
a > Z olduÄu yukarıda açıkça görülmektedir.
Karakterler sayısal kodları ile karÅılaÅtırılmaktadır. Kod büyüdükçe karakter de büyür denebilir. a için yazılan kod (97) Z(90) kodundan büyüktür.
- Tük küçük harfler büyük harflerden sonra gelir. Bundan dolayı küçük harflerin en küçüÄü bile büyük harflerin tamamından büyüktür.
Ãgibi karakterler alfabeden tamamen farklı düÅünmelidir. Bu karakterlerin kodları küçük harflerden büyüktür.
DoÄru KarÅılaÅtırma
Karakter karÅılaÅtırmasını âdoÄruâ olarak yapmak göründüÄünden daha zordur. Ãünkü alfabe dilden dile farklılık göstermektedir. Aynı görünüÅlü harfler farklı alfabelerde farklı yerlerde yer alırlar.
Tarayıcı hangi dil ile karÅılaÅtıracaÄını bilmeli.
Neyse ki tüm modern tarayıcılar(IE10- ek kütüphanelere gerek duymaktadır Intl.JS ) uluslararası dil standardına sahiptir ECMA 402.
Bu özel bir metod ile farklı dillerde karakterlerin birbirleri ile karÅılaÅtırılabilmesini saÄlar. Kuralları Åu Åekildedir:
str.localeCompare(str2) in çaÄırılması:
- EÄer dil kurallarına göre
strstr2den büyükse1döndürür. - EÄer
strstr2den küçükse-1döndürür. - EÄer birbirleri ile eÅit ise
0döndürür.
ÃrneÄin:
alert( 'Ãsterreich'.localeCompare('Zealand') ); // -1
Aslında bu metodun dökümantasyonâda belirtilen iki tane argümanı vardır. Bu argümanlar ile hangi dili kullanmak istediÄinizi veya "a" ile "aÌ"'nın aynı Åekilde davranılmasını isteyip istemediÄinizi belirtebilirsiniz.
Unicode ve Internaller.
Bu bölümde karakter dizilerinin daha derin özelliklerine deÄinilecektir. Bu bilgiler emoji, hiyeroglif veya matematiksel ifadelerde yardımcı olur.
EÄer bu konuda bir ihtiyacınız yoksa bu bölümü atlayabilirsiniz.
Vekil Ãiftler
ÃoÄu sembol 2-byte kod ile tanımlanır. ÃoÄu Avrupa dili, sayılar ve çoÄu hiyeroglifler iki byte ile tanımlanabilir.
Fakat iki byte 65536 sembolü tanımlayabilir ve tüm semboller için bu yeterli deÄildir. Bundan dolayı nadir semboller bir çift 2-byteâlık karakter ile tanımlanır. Buna vekil çiftler veya âsurrogate pairâ adı verilir.
Böyle sembollerin uzunluÄu 2âdir:
alert( 'ð³'.length ); // 2, Matematiksel komut büyük X
alert( 'ð'.length ); // 2, Sevinçten aÄlama emojisi
alert( 'ð©·¶'.length ); // 2, nadir bir Ãin hiyeroglifi
Bu vekil çiftler JavaScript yaratıldıÄında meydanda yoktu, bundan dolayı dil tarafından doÄru olarak iÅlenemez.
Tek bir karakter olmasına raÄmen length (uzunluk) 2 göstermektedir.
String.fromCodePoint ve str.codePointAt az bilinen ve bu ikili karakterlerle uÄraÅan iki metoddur. Dile entegreleri yakın zamanda gerçekleÅti. Bundan önce sadece String.fromCharCode ve str.charCodeAt bulunmaktadır. Bu metodlar aslında fromCodePoint/codePointAt ile aynıdır fakat ikili karakterler ile çalıÅmamaktadırlar.
ÃrneÄin sembolün alınması biraz karmaÅıktır, çünkü bu çiftler iki karakterden oluÅmaktadırlar.
alert( 'ð³'[0] ); // garip semboller...
alert( 'ð³'[1] ); // ...her biri ikilinin parçaları
Dikkat ederseniz çiftli karakterler tek baÅlarına bir Åey ifade etmezler. Yani yukarıdaki örnekler aslında hiçbir iÅe yaramaz.
Teknik olarak, bu çiftler kodlarına bakılarak ayırt edilebilir: EÄer bir karakter 0xd800..0xdbff aralıÄında ise bu çiftin ilk karakteri demektir. İkinci karakter ise 0xd800..0xdbff aralıÄında olmalıdır. Bu aralıklar özel olarak çiftler için ayrılmıÅtır.
Yukarıdaki duruma göre:
// charCodeAt çiftlere uygun deÄildir, bundan dolayı sadece kodlar verilir.
alert( 'ð³'.charCodeAt(0).toString(16) ); // d835, 0xd800 ile 0xdbff arasında
alert( 'ð³'.charCodeAt(1).toString(16) ); // dcb3, 0xdc00 ile 0xdfff arasında
Sıralı eriÅim ( Iterable ) bölümünde bu çiftler ile ilgili daha fazla bilgi bulabilirsiniz. Muhtemelen bunun ile ilgili kütüphaneler de vardır, fakat burada önerecek kadar meÅhur olan yok henüz.
Aksan iÅaretleri ve normalleÅtirme
ÃoÄu dilde temel karakterlerin altına veya üstünü sembol eklenerek oluÅturulmuÅ yeni karakterler mevcuttur.
ÃrneÄin a, Ã Ã¡Ã¢Ã¤Ã£Ã¥Ä Åeklinde karakterlere sahiptir. Bu birleÅik karakterler UTF-16 tablosunda kendine has kodlara sahiptir. Hepsi deÄil tabi fakat çoÄu birleÅik karakter bu tabloda yer alır.
Elle bu karakterleri birleÅtirmek için, UTF-16 bazı Unicode karakter kullanmamıza olanak verir. Böylece temel karakterin üzerine bir veya daha fazla âiÅaretâ eklenerek yeni bir karakter âüretilebilirâ
ÃrneÄin, S harfinin üstüne ânoktaâ eklemek isterseniz \u0307 kullanabilirsiniz. Bunu kullandıÄınızda SÌ elde etmiÅ olursunuz.
alert( 'S\u0307' ); // SÌ
EÄer bu karakterin üstüne veya altına farklı iÅaretler eklemek istiyorsanız gerekli karakterleri istediÄiniz gibi ekleyebilirsiniz.
ÃrneÄin, eÄer âaÅaÄı noktaâ kodunu ( \u0323) eklerseniz, âSâin altına ve üstüne noktaâ demiÅ olursunuz ve Åu Åekilde bir karakter elde edersiniz: SÌÌ£
ÃrneÄin:
alert( 'S\u0307\u0323' ); // SÌÌ£
Böylece çok farklı karakterler elde etmek mümkündür, fakat bu bir probleme neden olmaktadır: iki karakter görünüÅte birbiri ile aynı olabilir, fakat iki farklı Unicodeâa sahip olabilir.
ÃrneÄin:
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 için âUnicode normalleÅtirmeâ algoritmaları mevcuttur. Bu karakterleri tek bir ânoramâ forma çevirir.
str.normalize() Åeklinde uygulaması yapılmaktadır.
alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
Bizim durumumuzda normalize() fonksiyonu aslında 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
Gerçekte bu durumla çok nadir karÅılaÅılır. Bu karakter bile SÌÌ£ oldukça âyaygınâ olduÄundan, UTF-16 standart tablosu içerisinde yer almaktadır.
EÄer normalizasyon kurallarını ve tiplerini daha derinlemesine öÄrenmek istiyorsanız Unicode Normalization Forms adresinden inceleyebilirsiniz. Pratikte yukarıda verilen bilgiler yeterli olacaktır.
Ãzet
- 3 tip tırnak bulunmaktadır. â`â iÅareti ile birkaç satırdan oluÅan karakter dizisi yazmak mümkündür.
- JavaScriptâte karakterler UTF-16 ile kodlanmıÅtır.
\ngibi özel karakterler veya\u..ile Unicode kullanılabilir.- Karakteri almak için:
[]kullanılır. - Alt karakter kümesi almak için
sliceveyasubstringkullanılır. - Küçük/büyük harf deÄiÅimi için:
toLowerCase/toUpperCase. - Alt karakter dizisi aramak için :
indexOfveyaincludes/startsWith/endsWithkullanılabilir. - Karakterleri dile göre karÅılaÅtırmak için
localceComparekullanılabilir. DiÄer türlü karakterler kodlarına göre karÅılaÅtırılırlar.
Bunun yanında karakter dizileri için daha baÅka yardımcı metodlar bulunmaktadır:
str.trim()â baÅlangıç ve bitiÅteki boÅlukları siler.str.repeat(n)âstrâyi istendiÄi kadar tekrar eder.- ⦠Daha fazlası için manual adresine bakabilirsiniz.
Karakter dizileri bunun yanında arama/deÄiÅtirme veya regular expression için metodlar barındırmaktadır. Fakat bu konular ayrı bölümleri hak etmektedir. Bu konulara ilerleyen bölümlerde dönülecektir.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)