"Peter Konner" <konner@mazdapc.dk> writes:
> Hvis nogle derfor savner et script til validering af både dato og
> klokkeslæt, så har jeg lagt et lille eksempel ud på
>
http://www.pointfigure.dk/filer/datotest.htm
>
> Kommentarer er velkomne
Du kan teste om en streng er ren numerisk med et regulært udtryk:
function erTal (s) {
return (/^\d+$/).test(s);
// eller (måske en anelse hurtigere en gang imellem)
// return !(/\D/).test(s);
}
Ældre browsere forstår måske ikke regexp-literal-notationen,
så /^\d+$/ kan udskiftes med
new RegExp("^\d+$")
Det kan også nemt indpasses i de funktioner der bruger det,
i stedet for en separat funktion. Så kan man også tjekke at
det er det rigtige antal cifre med det samme.
Det er nemmere at teste en dato ved hjælp af Date-objekter.
function erDato(dtStr) {
if (! (/^\d{6}$/).test(dtStr)) {
alert("Dato-indtastningen skal være seks cifre")
return false;
}
var dag = +dtStr.substring(0,2);
var mnd = +dtStr.substring(2,4)-1;
var aar = +dtStr.substring(4,6);
aar += (aar >= 60)?1900:2000;
var dato = new Date(aar,mnd,dag);
if (dato.getDate() != dag) {
alert("Dagen er ikke korrekt for den indtastede måned");
return false;
}
if (dato.getMonth() != mnd) {
alert("Måneden skal være mellem 01 og 12");
return false;
}
return true;
}
Der er ingen grund til at teste året, hvis man kun kan indtaste to
cifre, så kan det ikke give noget uden for 0-99.
I erTid-funktionen fjerner du foranstillede nuller fra strengen inden
du bruger parseInt. Det er ikke nødvendigt hvis du tilføjer et ekstra
argument til parseInt.
tim = parseInt(strTim,10); // altid base 10
Du kan også bruge en af de mange andre metoder til at oversætte strenge
til tal, nu du allerede har tjekket at der kun er cifre i strengen.
Jeg foretrækker "fortegns-plus", som virker lige som parseFloat.
Din test accepterer tiden 24:12. Er det med vilje?
function erTid(tmStr) {
if (!(/^\d{4}$/).test(tmStr)) {
alert("Tid skal indtastes som fire cifre");
return false;
}
var tim = +tmStr.substring(0,2);
var mnt = +tmStr.substring(2,4);
if (mnt < 0 || mnt > 59) {
alert("Minuttallet skal være mellem 00 og 59");
return false;
}
if (tim < 0 || tim > 23) {
alert("Timetallet skal være mellem 00 og 23");
return false;
}
return true;
}
> scriptet er ikke særlig avanceret, men da det skal
> bruges i en form, hvor brugeren ofte indtaster en dato, har jeg valgt formen
> [ddmmåå] og [ttmm] som hhv. dato og klokkeslæt.
Du burder gøre plads til fire cifre for året. Det er ikke svært at
teste for otte cifre og lade året være de sidste fire. Eller fem, hvis
du vil være *rigtigt* fremtidssikret.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:
http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'