Jak wiemy zmienne poza liczbami mogą zawierać także ciągi znaków zwane stringami (zostańmy przy sferze programowania :P).
var tekst = "Ala ma kota, a kot ma Ale, Ala go lubi, a kot ja wcale...";
Powyżej zadeklarowałem zmienną, która zawiera ciąg znaków. Od tej pory mogę na tej zmiennej (czyli na tym tekście) wykonywać różne czynności, a to za sprawą udostępnianych przez Javascript szeregu właściwości i metod.
Aby odczytać długość naszego tekstu posłużymy się właściwością length.
var tekst = "Ala ma kota, a kot ma Ale, Ala go lubi, a kot ja wcale"; alert(tekst.length); //wypisze się 54 //lub też alert( "Ala ma kota".length )
Aby odczytać znak na odpowiedniej pozycji w naszym tekście posłużmy się metodą charAt.
var tekst = "Ala ma kota, a kot ma Ale, Ala go lubi, a kot ja wcale"; document.write(tekst.charAt(2)); //wypisze się "a" bo stringi indeksowane są od 0
Kolejne zastosowanie:
var tekst = "Ala ma kota, a kot ma Ale, Ala go lubi, a kot ja wcale"; document.write(tekst.charAt(tekst.length-1)); //wypisze się ostatnia litera tekstu czyli "e"
Jeszcze jeden przykład:
var tekst = "Ala ma kota";
for (i=0; i<tekst.length; i++) {
for (x=0; x<i; x++) document.write(" ");
document.write("<strong>" + tekst.charAt(i) + "</strong><br />");
}
Co w rezultacie da nam:
No cóż. Używanie niełamliwej spacji do ustawiania pozycji literek nie świadczy zbyt dobrze o naszym profesjonalizmie ^^
Metoda zwraca nam kod ASCII znaku na pozycji podanej w parametrze.
var tekst = "Ala ma kota"; document.write(tekst.charCodeAt(0)); //wypisze się 65 (A) document.write(tekst.charCodeAt(4)); //wypisze się 109 (m)
Metody toUpperCase() i toLowerCase() służą odpowiednio do zamieniania tekstu na duże i małe litery.
var tekst = "Ala ma kota"; document.write(tekst.toUpperCase()); //wypisze sie ALA MA KOTA document.write(tekst.toLowerCase()); //wypisze sie ala ma kota
Powyższe metody zmieniają wszystkie litery w danym tekście. Często jednak chcemy zmienić tylko pierwsze litery w słowach (tak zwane Capitalize). Niestety JavaScript nie udostępnia nam metody, która by realizowała to zadanie. Możemy jednak pokusić się aby napisać ją własnoręcznie:
function capitalize(str) {
var tempArray = str.split(' '); //tworzymy tablicę zawierającą słowa naszego tekstu
for (var i = 0; i < tempArray.length; i++) { //wykonujemy pętlę po elementach tablicy
tempArray[i] = tempArray[i].charAt(0).toUpperCase() + //zmiększamy pierwszą litrkę słowa...
tempArray[i].substring(1); //+ dodajemy dalszą część słowa
}
return tempArray.join(' '); //łączymy naszą tablicę w tekst
}
document.write( capitalize(zmienna,1) );
Tak samo możemy zamieniać pierwsze litery w słowach na małe. Wystarczy tylko zamiast metody toUpperCase() skorzystać z toLowerCase().
//... tempArray[i] = tempArray[i].charAt(0).toLowerCase() + tempArray[i].substring(1); //...
Metoda ta służy do pobierania kawałka tekstu. Pierwszym jej parametrem jest początek pobieranego kawałka tekstu, a drugi wskazuje na ilość pobieranych liter. Drugi parametr jest opcjonalny. Jeżeli go nie podamy, wówczas pobierany kawałek tekstu będzie się rozpoczynał w miejscu na który wskazuje pierwszy parametr, a kończył z końcem tekstu. Na przykład:
var tekst = "Ala ma kota"; document.write(tekst.substring(0,3) + '<br />'); //wypisze sie Ala document.write(tekst.substring(3)); //wypisze sie ma kota
Przykład poprawiania imienia:
var tekst = "mArCiNeK";
document.write("Przed zamiana: " + tekst + "<br />"); //wypisze sie mArCiNeK
document.write("Po zamianie: " + tekst.charAt(0).toUpperCase() + tekst.substr(1).toLowerCase()); //wypisze sie Marcinek
Metoda substr ma bardzo podobne działanie do powyższej. Jedyna różnica polega na sposobie wywoływania. Ta metoda wymaga dwóch parametrów - pierwszy określa index początku pobieranego tekstu, drugi ilość znaków do pobrania:
var tekst = "Ala ma kota"; document.write(tekst.substr(0,3)); //wypisze sie Ala document.write(tekst.substr(4,7)); //wypisze sie ma kota
Prawdpododobnie w większości przypadków będziesz częściej korzystał z metody substring, gdyż jest łatwiejsza w użyciu.
Metoda ta służy do podawania pozycji podtekstu w tekście. Jeżeli zwróconą wartością jest -1, to podtekstu nie ma:
var tekst = "Ala ma kota";
document.write('Pozycja ciągu kot: ' + tekst.indexOf('kot')); //wypisze sie liczba oznaczająca pozycję ciągu kot
var zmienna = "Ala ma kota";
//sprawdzamy czy ciąg "psa" istneje
if (tekst.indexOf('psa') > 0) {
document.write('Ala ma psa');
} else {
document.write('Ala ma kota');
}
Podobne działanie ma metoda lastIndexOf, podaje ona jednak numer indexu ostatniego wystąpienia podtekstu
var tekst = "Ala ma kota i tak już jest";
alert(tekst.lastIndexOf('a')); //wypisze 10
W niektórych przypadkach nie porządane jest stosowanie pewnych znaków takich jak:
[,], [spacja], [-], [#], [_], [&], [%], [[], []], [&], [;], [:], [?], ['], [(], [)], [~], [|], [`], [!].
Jak wiadomo w adresie strony takie znaki nie mogą występować. To samo tyczy się nazw i wartości zmiennych zapisanych w tak zwanym query stringu (np. index.php?pierwsza_zmienna=wartosc1&druga_zmienna=wartosc2) czy też nazw i wartości zmiennych zapisanych w ciasteczkach.
Aby móc użyć tych znaków musimy nasz tekst przetworzyć za pomocą funkcji escape()
var tekst = "Ala ma kota, a kot ma Alę...";
document.write('Przed: ' + tekst + '<br />');
document.write('Po: ' + escape(tekst) );
Aby prze konwertować zakodowany za pomocą funkcji escape() tekst musimy posłużyć się funkcją unescape():
var tekst = "Ala ma kota, a kot ma Alę...";
tekst = escape(tekst);
document.write('Przed: ' + tekst + '<br />');
document.write('Po: ' + unescape(tekst) );
Tak samo jak w przypadku tablic, tak i w przypadku zmiennych tekstowych możemy skorzystać z metody slice(od,ile), która "tnie" nasz tekst i tworzy w ten sposób nowy. Pierwszy parametr od wskazuje na index (może być ujemny - wtedy będzie liczony od końca tekstu), od którego ma "wyciąć" kolejne litery, a parametr ile wskazuje ile liter ma być "wyciętych" (licząc od początku tekstu):
var tekst = "Ala ma kota";
var tekst_2 = tekst.slice(0,3)
document.write(tekst_2); //wypisze się Ala
var tekst_2 = tekst.slice(1,5)
document.write(tekst_2); //wypisze się la m
var tekst_2 = tekst.slice(4 , 6)
document.write(tekst_2); //wypisze się ma
var tekst_2 = tekst.slice(4)
document.write(tekst_2); //wypisze się ma kota
var tekst_2 = tekst.slice(-3)
document.write('Ala już nie ma ' + tekst_2 + ', bo kocur jej zwiał...'); //wypisze się Ala już nie ma kota, bo kocur jej zwiał...
No cóż. Tak czasami też bywa...
Więcej przykładów zastosowania tej metody możesz zobaczyć tutaj: slice().
Metoda ta bardzo dobrze nadaje się do usuwania pierwszych i ostatnich elementów z naszego tekstu. Aby na przykład usunąć pierwszą literę zastosujemy instrukcję:
var tekst = "Ala ma kota"; document.write( tekst.slice(1) )
Aby usunąć ostatnią literę skorzystajmy z instrukcji:
document.write( zmienna.slice(0, zmienna.length-1) )
Metoda split(znak,dlugosc) dzieli tekst na części. Miejsce podziału jest podawane w parametrze znak, a maksymalna ilość zwracanych elementów w parametrze długość (IE pomija ten parametr):
var tekst = "Ala ma kota, a kot ma Alę, Ala go kocha, a Kot ją wcale ;("
var czesci = tekst.split(', ',2);
for (x=0; x<czesci.length; x++)
document.write(czesci[x] + '<br />');
Metoda replace(ciag_szuakny,zamienieniony) służy do zamiany szukanych kawałków tekstu na inny tekst.
var tekst = "Ala ma kota, a kot ma Alę, Ala go kocha, a Kot ją wcale ;("
var zamieniony = tekst.replace("Ala","Ola");
document.write(zmienna + "<br />");
document.write(zamieniony);
W powyższym przykładzie, zamieniona zostanie tylko pierwsza Ala. Aby wszystkie Ale zmutowały w Ole, musimy zastosować wyrażenie regularne, nakazujące wyszukanie wszystkich Ali.
var tekst = "Ala ma kota, a kot ma Alę, Ala go kocha, a Kot ją wcale ;("
var zamieniony = tekst.replace(/Al/g,"Ol");
document.write(zmienna + "<br />");
document.write(zamieniony);