Avatar billede bootlab Nybegynder
17. juni 2003 - 00:16 Der er 4 kommentarer og
1 løsning

Validering af formfelt

Hey!
Jeg sidder og slås med at få valideret et felt!!
Feltet er til et dato indtast (dd-mm-yyyy).
Dvs. feltet skal valideres som flg.:
To tal efterfulgt af "-" derefter 2 tal igen, så en "-"
og til sidst 4 tal.

Anybody?
Avatar billede ahv Nybegynder
17. juni 2003 - 00:18 #1
Avatar billede ahv Nybegynder
17. juni 2003 - 00:26 #2
<script language="JavaScript">
<!--
function validatedate(f) {
    if (f=="") {
          alert("Du skal skrive en dato");
          return false;
    }
    if (f.length!=10||f.charAt(2)!="-" || f.charAt(5)!="-") {
          alert("Datoen skal fylde otte karakterer - eller datoen skal indeholde skilletegnet '-' mellem elementerne");
    return false;
    }
    var dd=Math.floor(f.substring(0,2));
    var mm=Math.floor(f.substring(3,5));
    var yy=Math.floor(f.substring(6,10));
    if (dd<1 || dd>31 || mm<1 || mm>12) {
      alert("Ulovlig dato: dag skal ligge mellem 1 og 31, måned mellem 1 og 12");
      return false;
    }
    if (yy>=70)  yyyy=yy+1900; else  yyyy=yy+2000
    d=new Date();
    d.setDate(dd);
    d.setMonth(mm-1)
    d.setYear(yyyy)

    return true;
  }

//-->
</script>

<form name="opret" onsubmit="return validatedate(fodt.value)" action="side.html" method="Post">
<input type="text" name="fodt" size="20">
</form>
Avatar billede ahv Nybegynder
17. juni 2003 - 00:55 #3
Den var ikke så god, den der blev postet der, en som jakoba har lavet også nu er skrevet om til dd-mm-yyyy ->

<script type='text/javascript'>
function checkDato( datoStreng ) {
    var format = /^\d\d-\d\d-\d\d\d\d$/;
    if (format.test(datoStreng)) {         
        var dag = parseInt(datoStreng.substring(0,2), 10);
        var maaned = parseInt(datoStreng.substring(3,5), 10);
        var aar = parseInt(datoStreng.substring(6,10), 10);
        var dato = new Date(aar, maaned-1, dag);
        if (dato.getDate() == dag && dato.getMonth() == maaned-1) {
            return true;
        }
    }
    return false;
};

function valider (formObjekt) {
    if (!checkDato(formObjekt.datoFeltNavn.value)) {
        alert("den indtastede dato duer ikke.\nBenyt formatet DD-MM-YYYY");
        formObjekt.datoFeltNavn.focus();
        return false;
    }
    return true;
};
</script>

<form method=post action="form.htm" onsubmit="return valider(this);">
<input type="text" name="datoFeltNavn"><br>
<input type="submit">
</form>
Avatar billede macho Praktikant
17. juni 2003 - 03:09 #4
roenving hjalp mig en del med et længere script
(se her: http://www.eksperten.dk/spm/363938 )
og i denne forbindelse gav han mig denne fidus med inputmaske til dato-felt:

<html><head>
<TITLE>Validering dd-mm-yyyy</TITLE>
<META NAME="Generator" CONTENT="Stone's WebWriter 3.5">
<!-- Virker i IE6, men ikke i Stone's interne -->
<script LANGUAGE="javascript" TYPE="text/javascript">
//Script til inputmaske for datofeltet. START
var newVal="";
var dd=0;
var mm=0;
var repeatRemove=0;

function getCharCode(e){
return (e.which)?e.which:e.keyCode;
}

function restoreVal(eC,fld){
    if (eC==8||repeatRemove>0){
        if (newVal.length>repeatRemove){
              newVal=newVal.substring(0,newVal.length-repeatRemove)
        }else{
            newVal="";
        }
    }
    repeatRemove=0;
    fld.value=newVal;
}

function inputDate(e,fld){
removeChar=false;
newVal=fld.value;
charCode = getCharCode(e);
if ((fld.value.length==2 || fld.value.length==5) && charCode==45){newVal+="-";return true;}
if (fld.value.length==10 || charCode>57 || charCode<48){
    return false;
    }
   
newVal=fld.value+String.fromCharCode(charCode)

switch (fld.value.length){
    case 0:
          if (+newVal>3){repeatRemove++;return false;}
          break;
      case 1:
          if (+newVal>31){repeatRemove++;return false;}
          if (+newVal==00){repeatRemove++;return false;}
          dd = +newVal;
          newVal+="-";
          break;
      case 2:
          newVal=fld.value+"-"+String.fromCharCode(charCode)
          if (charCode>49){repeatRemove++;return false;}
          break;
      case 3:
          if (charCode>49){repeatRemove++;return false;}
          break;
    case 4:
        var mm = parseInt(newVal.substring(3),10);
        if (mm==2 && dd>29 || mm>12 || mm==00){repeatRemove++;return false;}
        if (dd==31 && (mm==4 || mm==6 || mm==9 || mm==11)){repeatRemove++;return false;}
        newVal+="-";
        break;
    case 5:
          newVal=fld.value+"-"+String.fromCharCode(charCode)
          break;
      case 6:
          if (charCode<49 || charCode>50){repeatRemove++;return false;} //Tillader 1 og 2

som første tal i årstal
          break;
      case 7:
          var yy = parseInt(newVal.substring(6));
          if (yy<19 || yy>20){repeatRemove++;return false;} //Tillader 19 og 20 som første

to tal i årstal
          break;
      case 8:
          var yyy = parseInt(newVal.substring(6));
          if (yyy>200){repeatRemove++;return false;} //Tillader kun 0 som trejde tal, hvis

første to er 2 og 0.
          break;
      case 9:
          var yyyy = parseInt(newVal.substring(6));
                    var thisYear = new Date().getFullYear();
          if (yyyy>thisYear){repeatRemove++;return false;} //Tillader højst i år som årstal.
          break;
}
return true;
}
//Script til inputmaske for datofelt. SLUT
</SCRIPT>
</HEAD>
<BODY>
<form>
<INPUT type="text" name="date" value="" onkeydown="if(getCharCode(event)==8)repeatRemove++;"

onkeypress="return inputDate(event,this);"

onkeyup="restoreVal(getCharCode(event),this);this.focus();">
</FORM>
</body>
</HTML>

Det virker fortrinligt.
Avatar billede bootlab Nybegynder
17. juni 2003 - 11:37 #5
Tak ahv!
Først for reminderen om at der jo ligger masse af svar her,
som man bare kan søge på !! (:/). (ved det godt med glemmer det i kampens hede)
Anyway.. Det første script du så postede gav mig kvaler og jeg opgav det og gik til køjs.. men så idag prøvede jeg det du postede kl. 00:55:20 og det virker som det skal - jeg fik det ind i mit script som tjekker andre form felter uden problemmer... SEJT NOK :)

macho> Det kan godt være at det script virker fortrinligt, meeen det er alt
for stort og kompliceret... ellers tak for hjælpen :)

over and out!
/boot
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester