JavaScript-opas
String-olio ja merkkijonojen käsittely
Merkkijonojen käsittely on eräs yleisimmin tehtävistä toimenpiteistä kaikissa ohjelmointikielissä. Tämän johdosto useimmissa kielissä on erittäin runsaasti merkkijonojen käsittelyyn ja muokkaamiseen liittyviä metodeja. JavaScriptissä merkkijonoa edustaa String-tyyppinen olio.
Merkkijonon pituus saadaan selvillä String-oliotyypin muuttujalla length (joka on String-olion ainut muuttuja):
var a,pituus
a = "merkkijono";
pituus = a.length;
document.write(pituus); //10
pituus = "toinen merkkijono".length;
document.write(pituus); //17
String-olioon liittyy useita käytännöllisiä metodeja, joista useimmat liittyvät jonkin kirjaimen tai kirjainyhdistelmän etsimiseen merkkijonosta. Ensimmäinen tällaisista metodeista on CharAt(index)-metodi, joka palauttaa merkin halutusta indeksistä. Huom. JavaScriptissä, kuten monissa muissakin ohjelmointikielissä ensimmäinen indeksi on aina nolla.
var a = "merkkijono";
document.write(a.charAt(2)); // palauttaa r
Yleisin käyttökohde merkkijonoon liittyville metodeille on kuitenkin tietyn arvon etsiminen ja sen sijainnin tarkistaminen merkkijonosta. Tähän tarkoitukseen voidaan käyttää parivaljakkoa indexOf(arg1,[arg2])- ja lastIndexOf(arg1,[arg2]); näistä ensimmäinen palauttaa etsittävän merkkijonon indeksin merkkijonon alusta lukien, jälkimmäinen lopusta lukien.
Molemmat metodit ottavat yhden pakollisen argumentin, johon määritellään etsittävä merkki/merkkijono. Toisen, vapaaehtoisen argumentin avulla määritellään monettako ilmentymää etsimme. Metodi palauttaa merkin/merkkijonon aloitussijainnin merkkijonossa. Mikäli etsittävää ei löydy merkkijonosta, palauttaa metodi arvon -1.
var a, b, c
a = "joku@jossain.com";
b = a.indexOf("@");
c = a.lastIndexOf(".com");
Hyvin usein edellä saatujen indeksien perusteella tarkistetaan esim. käyttäjän antaman domainin kelvollisuus metodilla substring(index1,index2). Substring-metodi palauttaa merkkijonon alkaen indeksistä 1 ja päättyen ennen indeksiä 2.
var a, b
a = "joku@jossain.com";
b = a.substring(a.indexOf("@"), a.lastIndexOf(".com"));
Näiden lisäksi on olemassa vielä kaksi eritäin yleishyödyllistä metodia: toLowerCase() ja toUpperCase(). Näistä ensimmäinen muuntaa merkkijonon pieniksi kirjaimiksi, jälkimmäinen kapiteeleiksi. Esimerkiksi :
"merkkijono".toUpperCase // MERKKIJONO
Esimerkki: Sähköpostiosoitteen tarkistus ja validointi JavaScriptin avulla
Seuraavassa esimerkissä luomme funktion, joka tarkistaa syötteenä annettavan sähköpostiosoitteen oikeellisuuden. Funktio käyttää hyväkseen tässä esiteltyjä merkkijono-olion metodeja:
function validoi(syote) {
// muunnetaan syöte kokonaan pieniksi kirjaimiksi
syote = syote.toLowerCase();
// jos syötteestä löytyy @-merkki
if (syote.indexOf("@") !=-1) {
// haetaan syotteen pituus
var pituus
pituus = syote.length;
//tarkistetaan onko osoitteessa useampi @-merkki
var atpaikka_alku, atpaikka_loppu
atpaikka_alku= syote.indexOf("@");
atpaikka_loppu = syote.lastIndexOf("@");
if (atpaikka_alku==atpaikka_loppu) {
// tarkistetaan paatteen kelvollisuus
//oletuksena 2-3 merkkiset päätteet menevät läpi ilman erikoistarkastusta
var paatteenpituus,piste
piste = syote.lastIndexOf(".");
paatteenpituus = pituus - piste;
if (paatteenpituus > 2 && paatteenpituus < 5) {
document.write("Antamasi osoite vaikuttaa kelvolliselta!");
}
// jos pääte on yli 3 merkkiä tarkistetaan joukosta esivalikoituja päätteitä
else {
var paate
domain = syote.substring(piste+1,pituus);
var sallittu = new Array(3);
sallittu[0] = "info";
sallittu[1] = "museum";
sallittu[2] = "aero";
var ok = false;
for (var i=0;i<3;i++) {
if (sallittu[i]==domain){
ok=true;
break;
}
}
if (ok==false){
document.write("Antamasi sähköpostiosoite vaikuttaa virheelliseltä. Ole hyvä ja tarkista se!");
}
else {
document.write("Antamasi osoite on kelvollinen!");
}
}
}
else {
document.write("Anna kelvollinen sähköpostiosoite!");
}
}
else {
document.write("Antamasi email osoite ei kelvollinen!");
}
}
validoi("joku@jossain.info");
Toinen, huomattavasti järeämpi (ja samalla myös järkevämpi) keino merkkijonojen käsittelyyn ovat säännölliset lauseet (regular expressions, regexp). Niiden avulla aiemmin läpikäymämme koodi saataisiin mahtumaan parille riville ja onnistuisimme ujuttamaan siihen parannuksiakin:
function validoi(syote)
{
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
if (filter.test(syote)) {
document.write("Kaikki ok");
}
else {
document.write("Mailiosoite ei ole kelvollinen");
}
}