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"); 

	}
}