webForumDet fria alternativet

Kontrollera att en input form verkligen innehåller ett datum.

JavaScript

4 svar · 252 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1
/* Detta script finns att hämta på [url]http://www.jojoxx.net[/url] och
   får användas fritt så länge som dessa rader står kvar. */

function jxValidateDate(date){
	var year = date.substring(0,4);
	var month = date.substring(5,7);
	var day = date.substring(8,10);
	if (jxTimeValidateDec(year) && jxTimeValidateDec(month) && jxTimeValidateDec(day) && date.length == 10) {
		var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		if (parseInt(year/4)*4 == year) { months[1] = 29 }
		if (parseInt(year/100)*100 == year) { months[1] = 28 }
		if (parseInt(year/400)*400 == year) { months[1] = 29 }
		if (jxTimeCheckInterval(month, 1, 12) && jxTimeCheckInterval(day, 1, months[parseInt(month)-1]) && date.substring(4,5) == "-" && date.substring(7,8) == "-"){
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

Hur testar jag att ett fält verkligen innehåller ett datum. Försöker använda mig av kombinationen av skriptet ovan och JoJoxxx validateForm funktion nedan:

function validateForm(){
	if (document.Updateform1.FormDatum.value=="") {
		alert("You must enter a DATE.");
		return false;
	} else if ((jxValidateDate(document.Updateform1.FormDatum.value) = true)){
		alert("Jippie")
		return false;
	} else if (document.Updateform1.FormKontor.value=="") {
		alert("You must enter a OFFICE.");
		return false;
	} else if (document.Updateform1.FormRubrik.value=="") {
		alert("You must enter a HEADLINE.");
		return false;
	} else if (document.Updateform1.FormAuthor.value=="") {
		alert("You must enter a AUTHOR.");
		return false;
	} else {
		alert("Submit is OK!");
		return true;
	}
}

Den sista funktionen smäller. Misstänker att man inte får skriva så här: ((jxValidateDate(document.Updateform1.FormDatum.value) = true)){

Hilfe!? :stud

Medlem sedan juni 20004 308 inlägg
#2

Du är helt på rätt väg. Funktionen returnerar true/false beroende på om datumet är rätt eller inte. Du behöver alltså inte göra ytterligare en jämförelse hurvida det är sant eller inte (jämförelse definieras f.ö. med == medans tilldelning definieras med =) :)

Sedan slänger vi in ett logiskt "icke" (!) eftersom du kollar om datumet INTE är rätt.

} else if (!jxValidateDate(document.Updateform1.FormDatum.value)){
Medlem sedan maj 20012 080 inlägg
#3
<script type="text/javascript">
/* Detta script finns att hämta på [url]http://www.jojoxx.net[/url] och
   får användas fritt så länge som dessa rader står kvar. */

function jxValidateDate(date){
	var year = date.substring(0,4);
	var month = date.substring(5,7);
	var day = date.substring(8,10);
	if (jxTimeValidateDec(year) && jxTimeValidateDec(month) && jxTimeValidateDec(day) && date.length == 10) {
		var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
		if (parseInt(year/4)*4 == year) { months[1] = 29 }
		if (parseInt(year/100)*100 == year) { months[1] = 28 }
		if (parseInt(year/400)*400 == year) { months[1] = 29 }
		if (jxTimeCheckInterval(month, 1, 12) && jxTimeCheckInterval(day, 1, months[parseInt(month)-1]) && date.substring(4,5) == "-" && date.substring(7,8) == "-"){
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function validateForm(){
	if (document.Updateform1.FormDatum.value=="") {
		alert("You must enter a DATE.");
		return false;
	} else if (!jxValidateDate(document.Updateform1.FormDatum.value)){
		alert ("NOT a valid date. Use YYYY-MM-DD.")
	} else if (document.Updateform1.FormKontor.value=="") {
		alert("You must enter a OFFICE.");
		return false;
	} else if (document.Updateform1.FormRubrik.value=="") {
		alert("You must enter a HEADLINE.");
		return false;
	} else if (document.Updateform1.FormAuthor.value=="") {
		alert("You must enter a AUTHOR.");
		return false;
	} else {
		alert("THANK YOU\nSubmit is OK!");
		return true;
	}
}

När jag kör ovan så smäller det på if (jxTimeValidateDec(year) && jxTimeValidateDec(month) && jxTimeValidateDec(day) && date.length == 10) {

Ska inte datumet vara formaterat "2003-02-03" ?

:r :r

Medlem sedan juni 20004 308 inlägg
#4

Ursäkta, jag tittade inte så noga på det första inlägget. Funktioner kommer från ett gammalt biblitoket och det saknar en annan funktion från samma bibliotek. Ta denna funktion istället;

function jxValidateDate(str){
	if(str.length!=10||str.lastIndexOf('-')!=7||str.indexOf('-')!=4){return false;}
	var a=new Array(); a=str.split(/-/); var months=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	for(var n=0;n<a.length;n++){for(var nn=0;nn<a[n].length;nn++){if("0123456789".indexOf(a[n].substring(nn,nn+1))<0){return false;}}}
	if(parseInt(a[0])%4==0&&parseInt(a[0])%100!=0||parseInt(a[0])%400==0){months[1]=29;}
	if(parseInt(a[1])>12||parseInt(a[1])==0||parseInt(a[2])>months[parseInt(a[1])-1]||parseInt(a[2])==0){return false;}
	return true;
}
Medlem sedan maj 20012 080 inlägg
#5

Tack jojoxx nu fungerar det precis som jag vill ha det.

272 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
139 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)