/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Javascript: simpel datovalidering
Fra : Peter Konner


Dato : 20-02-04 21:34

Jeg er absolut javascript-novice, men har længe savnet en simpel funktion
til at validere en indtastet dato i formatet DDMMÅÅ.
På nettet kan jeg ikke finde noget brugbart (og forståeligt), og jeg har
derfor skriblet lidt selv, men er gået i stå......

Hele koden (lige til browseren) ser p.t. således ud.
Enkelte linier er //'et ud, da jeg ikke lige ved, hvordan de skal bruges, og
der er indsat nogle alerts til at checke på værdier osv......

--------start her-----------------------------------------
<html>
<body>

<script language="JavaScript">

// var DaysInMonth = new
array("31","28","31","30","31","30","31","31","30","31","30","31");
var DaysInMonth = new Array;
var ValidChars = "0123456789";
var IsNumber;
var Char;
var dg, md, ar, aar;

function ChkDato(dto) {
alert("Begynder check...");
IsNumber = true;
// Check om feltet er udfyldt
if(dto == "") {
alert("Du skal indtaste en dato på formen ddmmåå!");
return false;
}
else {
// Check om længden = 6
if(dto.length < 6) {
alert("Du skal indtaste en dato på formen ddmmåå inkl.
foranstillede 0-er!");
return false;
}
else {
// Check om feltet kun indeholder tal
for (i = 0; i < dto.length && IsNumber == true; i++) {
Char = dto.charAt(i);
if (ValidChars.indexOf(Char) == -1) {
IsNumber = false;
}
}
if(IsNumber == false) {
alert("Du skal indtaste en dato på formen ddmmåå, benyt kun
tallene 0 til 9!");
return false;
}
else {
// Adskil dto i dg, md og ar
dg = dto.substr(0, 2);
md = dto.substr(2, 2);
ar = dto.substr(4, 2);
if(ar < 80) {
aar = 2000 + ar;
} else {
aar = 1900 + ar;
}
}
}
}
}

function validatedato() {
alert("Inden kaldet til ChkDato");
if (ChkDato(document.test.dato) == false) {
alert("ChkDato kaldt OK !");
return false;
}
}

</script>

<form name="test" action="_datotest.htm" method="post"
onsubmit="validatedato(); return false;">
&nbsp;<input type="text" size="12" maxlength="6" name="dato">&nbsp;<input
type="submit" value="- TEST -">
</form>
<br>
Sender den indtastede dato gennem funktionen ChkDato(), og returnerer hertil
!

</body>
</html>
---------slut her----------------------------------------

Kan nogle her hjælpe mig videre med denne funktion ?
Den skal kunne tage hensyn til skudår, men det er vist også det mest
avancerede !!

Pft

--
-.-:-.-:-.-:-.-
Regards / Mvh
Peter Konner
Remove car from email / Fjern bilen fra min email



 
 
Lasse Reichstein Nie~ (20-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 20-02-04 23:10

"Peter Konner" <konner@mazdapc.dk> writes:

> Jeg er absolut javascript-novice, men har længe savnet en simpel funktion
> til at validere en indtastet dato i formatet DDMMÅÅ.

Overvej om det er et smart format. I internationalt sammenhæng er det et
dårligt format, fordi USA'nere vil komme til at skrive MMDDÅÅ. På længere
sigt er to cifre til årstallet måske for lidt. Jeg kan se at du skiller
ved 80.

> På nettet kan jeg ikke finde noget brugbart (og forståeligt), og jeg har
> derfor skriblet lidt selv, men er gået i stå......

Her er en simpel af slagsen (Date-objektet er din ven :)
---
<script type="text/javascript">
function validDate(str) { // str på formen DDMMÅÅ
if (!/^\d{6}$/.test(str)) { // nej hvis ikke seks cifre
alert("Du skal indtaste en dato på formen DDMMÅÅ!");
return false;
}
var day = Number(str.substring(0,2));
var mth = Number(str.substring(2,4))-1; // Date har Januar=0
var yr = Number(str.substring(4,6));
yr += (yr<80 ? 2000 : 1900); // læg 2000 til hvis <80, ellers 1900

var date = new Date(yr,mth,day);
if (date.getMonth()!=mth || date.getDate()!=day) {
// hvis dato ikke gyldig, så er mindst en af disse forkert.
alert("Datoen findes ikke!");
return false;
}
return date; // returner date-objekt, tæller som true.
}
</script>

> if (ChkDato(document.test.dato) == false) {

Kan skrives kortere som
if (!ChkDato(document.test.dato)) {

> Kan nogle her hjælpe mig videre med denne funktion ?
> Den skal kunne tage hensyn til skudår, men det er vist også det mest
> avancerede !!

Date-objektet tager hensyn til det meste. Det er meget nemmere end
at skulle tænke selv :)
Man skal bare huske reglen, at hvis man laver en Date med
new Date(yr,mth,day)
og datoen ikke findes, så vil Date korrigere datoen så den bliver
lovlig (31. april bliver til 1. maj). Når den korrigerer, så vil
mindst to af de angivne værdier blive ændret. Derfor er det nok
at test at to af dem har den forventede værdi, og jeg undgår
året fordi der stadig er nogle år-2000 problemer :)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Peter Konner (20-02-2004)
Kommentar
Fra : Peter Konner


Dato : 20-02-04 23:53

"Lasse Reichstein Nielsen" <lrn@hotpop.com> skrev i en meddelelse
news:vfm18kt4.fsf@hotpop.com...
> "Peter Konner" <konner@mazdapc.dk> writes:
>
> > Jeg er absolut javascript-novice, men har længe savnet en simpel
funktion
> > til at validere en indtastet dato i formatet DDMMÅÅ.
>
> Overvej om det er et smart format. I internationalt sammenhæng er det et
> dårligt format, fordi USA'nere vil komme til at skrive MMDDÅÅ. På længere
> sigt er to cifre til årstallet måske for lidt. Jeg kan se at du skiller
> ved 80.

Nej, det er ikke et smart format, men det er hurtigt at indtaste i, når
brugerne (danskere!) skal inddatere større mængder data !
Data'ene vil være levende i max. 5-6 år, så tidsrummet 1980 til 2079 burde
slå til

<snip>

> Date-objektet tager hensyn til det meste. Det er meget nemmere end
> at skulle tænke selv :)

Det er derfor, jeg holder så meget af PC'ere *GG*

Tak for dit forslag, det vil straks blive afprøvet !!


--
-.-:-.-:-.-:-.-
Regards / Mvh
Peter Konner
Remove car from email / Fjern bilen fra min email




Peter Konner (21-02-2004)
Kommentar
Fra : Peter Konner


Dato : 21-02-04 01:02

> function validDate(str) { // str på formen DDMMÅÅ
> if (!/^\d{6}$/.test(str)) { // nej hvis ikke seks cifre
> alert("Du skal indtaste en dato på formen DDMMÅÅ!");
> return false;

Inden jeg mistænker JS-programmører for at komme fra en anden galakse, vil
jeg gerne have forklaret ovenstående if-sætning (linie 2)......
! (udråbstegn) er negation, ^ (hat) er en XOR, men hvad BETYDER sætningen
???

Pft

--
-.-:-.-:-.-:-.-
Regards / Mvh
Peter Konner
Remove car from email / Fjern bilen fra min email



Lasse Reichstein Nie~ (21-02-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 21-02-04 02:34

"Peter Konner" <konner@mazdapc.dk> writes:

>> if (!/^\d{6}$/.test(str)) { // nej hvis ikke seks cifre

> Inden jeg mistænker JS-programmører for at komme fra en anden galakse, vil
> jeg gerne have forklaret ovenstående if-sætning (linie 2)......
> ! (udråbstegn) er negation, ^ (hat) er en XOR, men hvad BETYDER sætningen
> ???

! er ganske rigtigt logisk negation.
/^\d{6}$/ er et regulært udtryk (en Regular Expression Literal).
Den er afgrænset af / og /, så det er det der står imellem der er
vigtigt I en regexp betyder ^ starten på en streng, $ betyder
slutningen, \d betyder et ciffer, of {6} betyder 6 af det
foregående. Man kan så teste om en streng matcher det mønster man har
defineret. Altså, det regulære udtryk /^\d{6}$/ matcher de strenge
der mellem start og slut netop består af seks cifre.

Hele udtrykket
if( !/^\d{6}$/.test(str))
kan så læse som
hvis ikke mønstret "netop seks cifre" matcher strengen str, så ...

Regulære udtryk er meget effektive til at beskrive mængder af strenge.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Peter Konner (21-02-2004)
Kommentar
Fra : Peter Konner


Dato : 21-02-04 02:48

<SNIP>

> Regulære udtryk er meget effektive til at beskrive mængder af strenge.

Super forklaring !!!
Takker og bukker !

--
-.-:-.-:-.-:-.-
Regards / Mvh
Peter Konner
Remove car from email / Fjern bilen fra min email




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste