• 7 odgovora
  • 2.525 pregleda
Validacija texta 02.04.2009. u 00:32 · pre 213 meseci #1
Treba mi pomoc oko sledeceg problema. Treba da napisem javascript za validaciju tekstualnih polja.

Tekstualna polja treba da prime podatke broju indeksa (koji treba da je oblika dd/dddd, na primjer 12/2004, gdje godina treba da bude veća od 1979 a manja ili jednaka od tekuće godine) i prosječnoj ocjeni studenta (realan broj sa 2 decimale iz intervala [5,10]).

Svaka pomoc bi mi izuzetno koristila jer sam pocetnik.
Potpis
www.mladenmp.ml
Re: Validacija texta 02.04.2009. u 10:12 · pre 213 meseci #2
Evo napisao sam na brzinu f-ju za validaciju indeksa u tom formatu, pa ti probaj:
Code:

function validacija_indeksa(br_indeksa) {
    if (br_indeksa.indexOf('/') == -1) {
        return false;
    }
    
    br_god = br_indeksa.split('/');
    
    if (br_god[0].length != 2 || br_god[1].length != 4) {
        return false;
    }
    
    if (br_god[0].charAt(0) < '0' || br_god[0].charAt(0) > '9' || br_god[0].charAt(1) < '0' || br_god[0].charAt(1) > '9') {
        return false;
    }
    
    godina = parseInt(br_god[1]);
    if (godina == 'NaN') {
        return false;
    }
    else {
        var dt = new Date();
        if (godina < 1979 ||  godina > dt.getFullYear()) {
            return false;
        }
    }
    
    return true;
    
}

A mogao bi da je testiraš npr. ovako:
Code:

function provera() {
    var br_indeksa = document.getElementById('indeks').value;
    
    if (!validacija_indeksa(br_indeksa)) {
        alert('Uneti broj indeksa nije validan.');
    }
    else {
        alert('Ok');
    }
}

Samo naravno pre toga napravi neko tekstualno polje sa id-em indeks i neko dugme koje ima onclick = "provera();".

Elem, kod mene na faksu format indeksa je ddd/dd (npr. 100/09).

E aj' sad ti probaj sam ovo za prosečnu ocenu studenta.

P.S. Ova f-ja je verovatno mogla da se zameni sa nekim regularnim izrazom, samo ja ne znam kako bi se onda godina ograničavala na taj opseg od 1979 do 2009, odnosno, do trenutne godine.

P.P.S. Ako ovo radiš samo zbog nekog domaćeg zadatka ili seminarskog, nebitno, onda ok, ali u realnim uslovima, nemoj nikad da se oslanjaš na validaciju na klijentskoj strani.

[Ovu poruku je menjao Nikola Poša dana 02.04.2009. u 11:23 GMT+1]
Re: Validacija texta 02.04.2009. u 12:04 · pre 213 meseci #3
Evo ipak ja da ti napišem i tu drugu f-ju za prosek:
Code:

function validacija_proseka(prosek) {
    if (prosek.length > 4) {
        return false;
    }
    
    for (var i = 0; i < prosek.length; i++) {
        if (prosek.charAt(i) < '0' && prosek.charAt(i) > '9' && prosek.charAt(i) != '.' && prosek.charAt(i) != ',') {
            return false;
        }
    }
    
    if ((prosek.indexOf('.') != -1 || prosek.indexOf(',') != -1) && (prosek.indexOf('.') != prosek.lastIndexOf('.') || prosek.indexOf(',') != prosek.lastIndexOf(','))) {
        return false;
    }
    
    if (prosek.charAt(prosek.length - 1) == '.' || prosek.charAt(prosek.length - 1) == ',') {
        return false;
    }
    
    broj = parseFloat(prosek);
    
    if (isNaN(broj)) {
        return false;
    }
    
    if (broj < 5 || broj > 10) {
        return false;
    }
    
    return true;
}

Uzeo sam u obzir da ta decimala može da bude ili '.' ili ',', pa zato imam te dugačke if-ove.
Re: Validacija texta 02.04.2009. u 17:56 · pre 213 meseci #4
U stvari, evo ovo su bolja rešenja, al' njih namerno nisam hteo odma' da pošaljem da te ne bih zbunio sa regularnim izrazima:

Validacija broja indeksa:
Code:

function validacija_indeksa(br_indeksa) {
    var pattern = /^[0-9]{2}\/[0-9]{4}$/;
    var dt = new Date();
    var godina = parseInt(br_indeksa.substr(-4));
    
    if (pattern.test(br_indeksa) && godina >= 1979 && godina <= dt.getFullYear()) {
        return true;
    }
    else {
        return false;
    }
}

Validacija prosečne ocene:
Code:

function validacija_proseka(prosek) {
    var pattern = /^[5-9]([\.\,][0-9]{2})?$/;
    
    if (pattern.test(prosek) ||  prosek == '10') {
        return true;
    }
    else {
        return false;
    }
}

Kraće, jednostavnije, čitljivije...
Re: Validacija texta 02.04.2009. u 21:35 · pre 213 meseci #5
Citat:
Nikola Poša:Kraće, jednostavnije, čitljivije... :)

i ne bas 100% ispravno :)

za prvi deo ces imati problema sa internet explorerom, koji bas ne voli negativni index u substr, ovo je sigurnije:
Code:

var godina = parseInt(br_indeksa.substr(3));


inace, evo one-linera za taj problem (mada je ipak preglednije u vise linija):
Code:

function validateIndex(index) {
   return index.match(/^\d{2}\/(\d{4})$/) && (RegExp.$1 << 0 >= 1979) && (RegExp.$1 << 0 <= (new Date).getFullYear());
}
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: Validacija texta 03.04.2009. u 00:44 · pre 213 meseci #6
Veliko HVALA Nikoli, i naravno Aleksandru.

Napomenuo sam da sam pocetnik a NIkolina rijesenja su mi pomogla da shvatim kako u buduce da radim
sa javascriptom.

Hvala i za regularne izraze koji su mnogo prakticniji.

Interesuje me gdje mogu da nadjem nesto vise o regularnim izrazima?

Jos jednom veliko hvala.
Potpis
www.mladenmp.ml
Re: Validacija texta 03.04.2009. u 15:36 · pre 213 meseci #7
Nema na čemu.

Što se tiče regularnih izraza, ne bih znao tačno da te usmerim na određeni sajt. Google-aj, tako je najbolje.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme