Eräs tärkeimmistä Javascriptin sovelluskohteista on lomakkeen tietojen tarkistus ennen niiden lähettämistä palvelimelle. Tällä tavoin voi vähentää palvelimen kuormitusta. Lisäksi käyttäjä saa nopemmain palautetta tekemistään erehdyksistä.
Kokeillaan yksinkertaista esimerkkiä, jossa lomakkeeseen syötetään uuden käyttäjän tiedot johonkin verkkopalveluun.
Jos tiedot on talletettu oikein, ne lähetetään samalle sivulle get-metodilla, joten niitä voi tutkia selaimessa näkyvässä URLissa. Esimerkiksi
http://.../tarkistus.html?nimi=Lerkko+Japoniemi&tunnus=lejari&sala1=Yksi2345&sala2=Yksi2345
Lomakkeen HTML-koodi on
<form name="tiedot" action="tarkistus.html" method="get" onSubmit="return tarkista()"> <table> <tr><td>Nimi:</td><td><input type="text" name="nimi" /></td></tr> <tr><td>Tunnus:</td><td><input type="text" name="tunnus" /></td></tr> <tr><td>Salasana:</td><td><input type="password" name="sala1" /></td></tr> <tr><td>Salasanan vahvistus:</td><td><input type="password" name="sala2" /></td></tr> <tr><td></td><td><input type="submit" value="Liity palveluun" /></td></tr> </table> </form>
Huomaa, että lomakkeen lähetyksen käsittelijä (onSubmit)
tulkitaan totuusarvoksi, jos siihen laitettu lauseke on
arvoltaan true, lomakkeen tiedot lähetetään.
Tapahtumankäsittelijässä kutsuttava funktio tarkista() on
<script type="text/javascript">
function tarkista() {
with (document.tiedot) {
// tarkistetaan ensin nimi
var re = /^[\wäöüåéè]+ [\wäöüåéè][\w äöüåéè]*$/i;
var nm = nimi.value;
if (!re.test(nm)) {
alert("Nimessä pitää olla etunimi ja sukunimi ilman erikoismerkkejä!");
nimi.select();
nimi.focus();
return false;
}
// tarkistetaan käyttäjätunnus
re = /^\w{6}\w*$/;
var tu = tunnus.value;
if (!re.test(tu)) {
alert("Käyttäjätunnuksessa saa olla kirjaimia a-z ja numeroita!\nTunnus on oltava vähintään 6 merkkiä pitkä!");
tunnus.select();
tunnus.focus();
return false;
}
// tarkistetaan, että salasanat ovat samat
s1 = sala1.value;
s2 = sala2.value;
if (s1 != s2) {
alert("Salasanan vahvistus epäonnistui!");
sala1.value = "";
sala2.value = "";
sala1.focus();
return false;
}
// tarkistetaan, että salasana on tarpeeksi monimutkainen
if (!/[0-9]/.test(s1) || !/[a-z]/.test(s1) || !/[A-Z]/.test(s1) || s1.length < 8) {
alert("Salasana on liian yksinkertainen!\nTarvitaan ainakin yksi pieni kirjain a-z, iso kirjain A-Z ja numero 0-9.");
sala1.value = "";
sala2.value = "";
sala1.focus();
return false;
}
}
return true;
}
</script>
Tekstimuotoisen tiedon tarkistuksessa on helpointa käyttää regex-lauseita, varsinkin monimutkaisissa tapauksissa. Edellä käytettiin seuraavia:
| Regex-lauseke | Selitys |
|---|---|
/^[\wäöüåéè]+ [\wäöüåéè][\w äöüåéè]*$/i |
Tekstin alku ^, yksi tai useampia alfanumeerisia merkkejä
\w ja/tai
joitakin muita kirjaimia [\wäöüåéè],
välilyöntimerkki, yksi alfanumeerinen merkki ja
lopuksi vielä hyväksytään välilyöntejä ja/tai alfanumeerisia merkkejä.
Tekstin loppu $.
|
/^\w{6}\w*$/ |
Vähintään 6 alfanumeerista merkkiä \w{6}
ja sen jälkeen lisää samoja
\w* (0-n kpl).
|
/[0-9]/ |
Yksi numero, yksi pieni kirjain, yksi iso kirjain. Käytetään varmistamaan, että ainakin yksi kutakin löytyy salasanasta. |