JavaScript 15.díl, string

Napsal O webu (») 22. 12. 2006 v kategorii Programování, přečteno: 5026×

Tento díl bude o tom jak správně pracovat s textovými řetězci

Text je asi to nejzákladnější co má každá webová stránka, proto se Vám určitě bude někdy hodit provádět některé základní úpravy.
Textový řetězec není nic jiného než pole a s jako takovým s ním můžeme pracovat. Chceme-li například zjistit délku řetězce můžeme použít vlastnost length (o polích bylo psáno v předchozích dílech).

Ekvivalence

Pokud budeme porovnávat znaky ne vždy to může být tak jak chceme.
var a = "a";
var b = "b";
if (a < b) // true
    document.write(a + " je menší než " + b);
else if (a > b)
    document.write(a + " je větší než " + b);
else
    document.write(a + " a " + b + " jsou ekvivalentní.");


Pokud budete testovat tento kód narazíte možná na zajímavé zjištění, například že se dají porovnávat znaky.
Příklad:
var a="a";  var b="b"; // a je menší než b
var a="a";  var b="A"; // a je větší než A
var a="a";  var b=61;  // a a 61 jsou ekvivalentní.
var a="g";  var b="č";  // g je menší než č
var a="abcda";  var b="abcde";  // abcda je menší než abcde

První řádek by se mohl zdát logický, jde to přece podle abecedy.
Druhý řádek už je asi trochu divný, vždyť jde o stejná písmena a "A" je "vyšší písmeno", tak proč? Jde o to, že všechny znaky se převádějí podle ASCII (Unicode) tabulky na hodnoty a písmeno "a" odpovídá číslu 61, písmeno "b" číslu 62. jednoduše se poté provádějí porovnání těchto čísel.
Třetí řádek ukazuje, že porovnávání probíhá po převodu na číslo a tedy písmeno "a" v ASCII (Unicode) tabulce 61 je rovno číslu 61
Čtvrtý řádek ukazuje, že se toto porovnávání nedá použít pro českou abecedu.
Poslední, pátý řádek ukazuje že se toto porovnání dá někdy použít nejen na znak ale také řetězce znaků.

Vytvoření textu

Jakkoliv se to může zdát tato kapitola hloupá, tak existuje několik způsobů ale taky častých chyb.
Textový řetězec vytvoříme:
var retezec="Textový řetězec";
var retezec= String("Textový řetězec");
var retezec= new String("Textový řetězec"); //objekt typu String
var neretezec=Textový řetězec; //Chyba: text musí být uvozen apostrofy nebo uvozovkami


Řetězec můžeme vytvořit také pomocí ASCII (Unicode) tabulky pomocí funkce fromCharCode():
var retezec=String.fromCharCode(65,66,67) // ABC

Funkce může obsahovat N argumentů, kde čísla znamenají jejich hodnotu v Unicode tabulce.

Funkce pro práci s textem

charAt()
Vrací znak podle určeného indexu.
var a="Texty"
a.charAt(0); //První znak: T
a.charAt(a.length-1); //Poslední znak: y


charCodeAt()
Vrací číslo znaku v Unicode tabulce podle určeného indexu.
" ".charCodeAt(0); //Mezera je také znak, má v tabulce číslo: 32


concat()
Vrací spojení N řetězců
var a="Dnes ";
var b="je ";
c=a.concat(b,"krásně");
document.write(c); // Dnes je krásně


indexOf()
Vrací první nalezený index hledaného řetězce, Při nenalezení vrací -1. Metoda je citlivá na velikost písmen.
a="mama mele maso";
a.indexOf("m"); // 0
a.indexOf("m", 0); // 0
a.indexOf("m",1); // 2
a.indexOf("ma",3); // 10
a.indexOf("tata"); // -1
"M".indexOf("m"); // -1


lastIndexOf()
Vrací první nalezený index hledaného řetězce, Při nenalezení vrací -1. Metoda je citlivá na velikost písmen.
a="mama mele maso";
c=a.lastIndexOf("m"); // 10
c=a.lastIndexOf("m", 0); // 0
c=a.lastIndexOf("m",2); // 2
c=a.lastIndexOf("ma",10); // 10
c=a.lastIndexOf("tata"); // -1


match()
Vrací část řetězce vybranou podle regulárního výrazu
a="Ukázkový text";
a.match(".$"); // "t"
a.match(".*"); // "Ukázkový text"
a.match(". ."); // "ý t"


replace()
Nahradí text vyhledaný regulárním výrazem nebo zadanám řetězcem
var a="Nějaký delší ukázkový text ze kterého se bude vybírat";
re = new RegExp(".* ");
a.replace(re,"X"); // "Xvybírat"


search()
Vrací index index hledaného řetězce podle regulárního výrazu. Při nenalezení vrací -1
a="Ukázkový text";
a.search("zk"); // 3
a.search("ká"); // 1
a.search("X"); // -1


slice()
Vrací text vybraný indexy
var a="Nějaký delší ukázkový text ze kterého se bude vybírat";
a.slice(13,26); // ukázkový text


split()
Vrátí pole, které vznikne rozdělím řetězce podle argumentu
var a="Nějaký delší ukázkový text ze kterého se bude vybírat";
a.split(" "); // [Nějaký,delší,ukázkový,text,ze,kterého,se,bude,vybírat] (jde o pole)
a.split(" ")[1]; // "delší"


substr()
Vrací řetězec od start indexu určitého množství znaků. Bez určení vrací celý řetězec
var a="Ukázkový text";
a.substr(0); // "Ukázkový text"
a.substr(0,1); // "U"
a.substr(9,4); // "text"


substring()
Vrací část řetězce ohraničeného zadanými indexy
var a="Ukázkový text";
a.substring(4,7); // "kov"


toLowerCase()
Vrátí upravený řetězec, kde všechna písmena jsou zmenšena.
var a="Ukázkový text";
a.toLowerCase(); // "ukázkový text"


toSource()
Viz kapitola o polích.
 
toString()
Vrací řetězec reprezentující specifikovaný objekt
var  a= new String("Ukázkový text");
a.toString(); // "Ukázkový text"


toUpperCase()
Vrátí upravený řetězec, kde všechna písmena jsou zvětšena.
var a="Ukázkový text";
a.toUpperCase(); // "UKÁZKOVÝ TEXT"


valueOf()
Viz kapitola o datumu a čase (13.díl).


Poznámka: Unicode tabulka rozšiřuje ACSII tabulku o znaky jednotlivých národních abeced (včetně české), matematické znaky apod. více o Unicode se dočtete na www.unicode.org nebo ve wikipedii na http://cs.wikipedia.org/wiki/Unicode


Autor: Martin
Štítky: JavaScript
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel pět a deset