Objektet String

Nästan alla javaskript kräver en eller annan form av stränghantering. Grundläggande är då att man vet vad en sträng är.

En sträng innehåller ett eller flera tecken som kan vara bokstäver, siffror eller andra tecken. Men till skillnad från numeriska variabler kan man inte utföra matematiska beräkningar med strängvariabler.

För att skapa ett nytt strängobjekt kan vi skriva:

var namn = new String("Det var en mörk och stormig natt");

Vi får då en variabel som innehåller Det var en mörk och stormig natt. Men det går lika bra att använda det kortare sättet och skriva:

var namn = "Det var en mörk och stormig natt";

Resultatet blir detsamma.

Vi börjar med att titta på tre av metoderna för objektet String() i JavaScript, nämligen .length, .charAt och .indexOf. De används för att ta reda på hur lång strängen är (length), vilket tecken som finns på en bestämd plats i en sträng (charAt) samt var i en sträng ett bestämt tecken finns eller en teckenföljd – en mindre sträng inom strängen – börjar (indexOf).

Varje tecken i en sträng har ett index och "numreringen" börjar alltid från 0. I en sträng som innehåller ordet "javaskript" har alltså "j" index 0, "v" index 3 och "ipt" index 7, 8 och 9.

(dot) operator
I många skript har vi använt en punkt (.) – till exempel mellan ett objekt och metoden vi vill utnyttja på objektet. På engelska kallas denna punkt "(dot) operator". Någon svensk översättning har jag inte sett, men vi kan säkert nöja oss med att kalla den "punkt".

Eftersom vi kommer att använda punkten en hel del, sätter jag ut den här framför metoderna.

.length

Metoden .length svarar med strängens längd, angivet som ett tal. Om strängen innehåller ordet "JavaScript" svarar .length alltså med 10. Ett exempel – hela koden kan läggas direkt där du vill visa länken:

<SCRIPT language="JavaScript">
<!-- Göm
function kollaPassw()
{
var losenord=prompt('Föreslå ett lösenord','');
if (losenord.length < 5)
{
alert('Lösenordet är för kort. Använd minst 5 tecken.');
kollaPassw(); 
}
else
alert('Ditt förslag: '+losenord+'!');
}
// Sluta gömma -->
</SCRIPT>

<A HREF="javascript:kollaPassw()">Testa här genom att ange ett lösenord som är mindre än 5 tecken långt.</A>

Testa här genom att ange ett lösenord som är mindre än 5 tecken långt.

var losenord=prompt('Föreslå ett lösenord',''); 
Variabel "losenord" kommer att få sitt strängvärde från prompten som öppnas. Observera att vi i slutet av parentesen lägger in två enkla citationstecken efter varandra.

Om vi inte gör det händer två saker:

  • För det första visas ett fult "undefined" i textraden.
  • För det andra kommer det, om besökaren bara klickar på Avbryt, att komma upp ett meddelande om skriptkörningsfel. Detta beror på att "losenord" inte får något värde alls. Med de två citationstecknen har "losenord" åtminstone fått en tom sträng som definition.

if (losenord.length < 5)
På objektet "losenord" använder vi metoden .length och undersöker om strängen är mindre än 5 tecken lång.

alert('Lösenordet är för kort. Använd minst 5 tecken.');
I så fall öppnas en meddelanderuta som talar om att lösenordet skall vara minst 5 tecken långt. När besökaren då klickar på OK, körs funktionen kollaPassw() om från början.

alert('Ditt förslag: '+losenord+'!');
Om lösenordet är minst 5 tecken långt – det vill säga om villkoret i if-satsen inte uppfylls – öppnas i stället en meddelanderuta som anger vilket lösenord som föreslogs.

.charAt

Med den här metoden kan vi undersöka vilket tecken som finns på en bestämd plats i strängen, eller enklare uttryckt: Vilken är första bokstaven, andra bokstaven och så vidare.

Kom bara ihåg att den första bokstaven (eller första tecknet, eftersom det inte behöver vara en bokstav) har index 0, den andra har index 1 och så vidare.

<SCRIPT LANGUAGE="JavaScript">
<!-- Göm
function kortNamn()
{
  var namn=prompt('Skriv ditt förnamn','');
if (namn.length < 2)
{
  alert('Namn innehåller minst två bokstäver.');
  kortNamn();
}
else
{
  var namn_0=namn.charAt(0);
  var namn_1=namn.charAt(1);
  alert('De två första bokstäverna i namnet är ' +namn_0 + namn_1 +'.');
}
}
// Sluta gömma -->
</SCRIPT>

<A HREF="javascript:kortNamn()">Testa här genom att skriva ditt namn.</A>

Testa här genom att skriva ditt namn

var namn_0=namn.charAt(0); och var namn_1=namn.charAt(1);
Här deklarerar vi variablerna namn_0 och namn_1, som får sina värden från strängvärdet "namn". Den första variabeln får värdet "den första bokstaven i namnet" (index 0) och den andra ges värdet på den andra bokstaven (index 1).

alert('De två första bokstäverna i namnet är ' +namn_0 + namn_1 +'.');
Det här öppnar en meddelanderuta där värdet på de båda variablerna skrivs ut.

Sista bokstaven

Om vi vill ha den sista bokstaven i namnet, kan vi använda metoden .length i kombination med .charAt.

<SCRIPT LANGUAGE="JavaScript">
<!-- Göm
function sistaNamn()
{
var namn=prompt('Skriv ditt förnamn','');
var namnsist=namn.length;
var sisten=namn.charAt(namnsist-1);
alert('Sista bokstaven är '+sisten+'.');
}
// Sluta gömma -->
</SCRIPT>

<A HREF="javascript:sistaNamn()">Testa här genom att skriva ditt namn.</A>

Testa här

var namn=prompt('Skriv ditt förnamn','');
Först får variabeln "namn" ett värde från en dialogruta där besökaren skriver sitt namn.

var namnsist=namn.length;
Sedan ger vi variabeln "namnsist" ett värde som motsvarar antalet tecken i strängen "namn".

var sisten=namn.charAt(namnsist-1);
I nästa steg hämtar variabeln "sisten" med .charAt sitt värde från en bestämd plats i "namn", nämligen det index som motsvarar .length. Men eftersom .length ger antalet tecken i strängen, och detta tal är 1 större än högsta index (lägsta index är 0), måste vi minska "namnsist" med 1.

alert('Sista bokstaven är '+sisten+'.');
Slutligen öppnar vi meddelanderutan som talar om vilken den sista bokstaven var.

.indexOf

Med metoden .indexOf kan vi leta efter ett bestämt tecken eller en mindre sträng av tecken inom en sträng, och få fram var tecknet finns eller var den mindre strängen börjar. Fortfarande gäller samma sak som tidigare: Det första tecknet i strängen har index 0.

Om tecknet eller delsträngen förekommer flera gånger inom strängen, kommer indexOf att svara med index för den första förekomsten.

Om tecknet eller "delsträngen" inte finns inom strängen, kommer indexOf i stället att svara med index -1.

Kolla e-postadressen

Med indexOf kan vi kontrollera att en inskriven e-postadress innehåller minst ett @ och minst en punkt.

Observera att den här metoden inte är bra för att kontrollera att e-postadressen verkligen kan finnas, eftersom skriptet inte reagerar om besökaren skriver till exempel @...@. Men skriptet visar på ett enkelt sätt hur indexOf fungerar:

<SCRIPT language="JavaScript">
<!-- Göm
function epostAdress()
{
var eAdr=prompt('Skriv din e-postadress','');
var atOK=eAdr.indexOf('@');
var punktOK=eAdr.indexOf('.');
if (atOK==-1 || punktOK==-1)
{
alert('Fel: Din adress måste innehålla @ och minst en punkt.');
epostAdress();
}
else
alert('OK');
}
// Sluta gömma -->
</SCRIPT>

<A HREF="javascript:epostAdress()">Testa här</A>

Testa här

var atOK=eAdr.indexOf('@'); och var atOK=punktOK.indexOf('.');
När besökaren har skrivit in sin adress i dialogrutan, letar variabeln "atOK" fram index för tecknet @ med variabeln "punktOK" tar fram index för punkt (.). Om något av dessa tecken inte finns, kommer motsvarande variabel att få värdet -1.

if (atOK==-1 || punktOK==-1)
Vilket betyder: "Om atOK är lika med -1 eller om atPunkt är lika med -1."

alert('Fel: Din adress måste innehålla @ och minst en punkt.');
I så fall öppnas en meddelanderuta som talar om att det måste finnas ett @, varpå funktionen epostAdress() körs om från början.

Om varken atOK eller punktOK är lika med -1, öppnas en meddelanderuta med texten OK.

Observera att det inte spelar någon roll var i strängen snabel-a eller punkten befinner sig - det viktiga är att de finns där, så att varken atOK eller punktOK blir lika med -1.

© SupportData.Net