Avatar billede eksperten1 Nybegynder
27. september 2004 - 21:14 Der er 1 kommentar

Generisk Validerings- script

Jeg er ved at lave et site hvor der dynamisk bliver lavet en masse formularer. Jeg vil gerne kunne lave prevalidering sådan at alle input felter bliver checket og valideret om det valgte/indtastede er gyldigt.

Jeg ved ikke om det kan lade sig gøre eller om det er for langt ude, men jeg drømmer om et universelt script som kan bruges i alle mine forms, der kan opfylde nedenstående:

For hvert input/select/checkbox/radio, kan der angives forskellige krav.

For input kunne det være:
Max n tegn
Min n tegn
En værdi mellem 0 - 999 (eller andre værdier!)

For select vil det være mindst 1 valgt, max n valgt (ved multiple select)

Ved Radio vil det være at der skal være valgt 1.

Men det er sådan at jeg gerne vil undgå at skulle skrive et valideringsscript for hver form, men gerne ville kunne sætte en værdi ud for hver formitem:
<input type="text" name="filtername" validatestring="charonly(1,5)"> Betydende at dette inputfelt skal indeholde chars, mindst 1 char max 5 chars. (eksempelvis)

Kan dette overhoved lade sig gøre ?

Skal fungere så universelt overhovedet, d.v.s. IE / mozilla
Avatar billede roenving Novice
28. september 2004 - 13:16 #1
F.eks. sådan ?-)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Generisk validering</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta name="keywords" content="roenving,http://www.eksperten.dk/spm/544411">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
function valider(f){
  var e = f.elements,val,min,max,fname,tval;
  for(i=0;e.length>i;i++){
    if(e[i].type=='text'&&e[i].name.indexOf('val')!=0){
      fname = max = min = 0;
      val = e['val'+e[i].name].value;
      tval = val.split("(")[1].split(")");
      fname = tval[1];
      min = tval[0];
      if(min.indexOf(",")>0){
        max = +min.split(",")[1];
        min = +min.split(",")[0];
      }
      val = val.split("(")[0];
     
      if(min&&min>e[i].value.length||max&&e[i].value.length>max){
        alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravene til længde')
        e[i].focus();
        return false;
      }
     
      var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
      var regexpmail = new RegExp("^["+t+"]["+t+"\\.\\-\\+]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"\\.\\-\\/]*$","i");

      switch(val){
        case('char'):
          if(!/^\w+$/i.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge tegn')
            e[i].focus();
            return false;
          }
        break;
        case('caps'):
          if(!/^[A-Z]+$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge store bogstaver')
            e[i].focus();
            return false;
          }
        break;
        case('number'):
          if(!/^\d+$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om kun at bruge tal')
            e[i].focus();
            return false;
          }
        break;
        case('curr'):
          if(!/^\d+([,\.]\d{3})*([,\.]\d\d)?$/.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om at bruge valuta-notation')
            e[i].focus();
            return false;
          }
        break;
        case('mail'):
          if(!regexp.test(e[i].value)){
            alert('Værdien i ' + ((fname)?'"'+fname+'"':e[i].name) + ' overholder ikke kravet om en mail-adresse')
            e[i].focus();
            return false;
          }
        break;
        default:
       
      }
    }
  }
  return true;
}
</script>
</head>

<body>
<br>
<form id="minForm" name="minForm" onsubmit="return valider(this);">
Store bogstaver: <input id="minInput" name="minInput" type="text" value="KUN CAPS" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
<input type="hidden" name="valminInput" value="caps(4,5)Store bogstaver">
<br>
Pris: <input id="minInput2" name="minInput2" autocomplete='off' type="text" value="Pris" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20">
<input type="hidden" name="valminInput2" value="curr()">
<br>
<input type="submit" value="Test">
</form>
</body>
</html>

-- og jeg ved godt, at jeg kun har lavet tekst-felter, men resten vil jeg lave, hvis ideen er brugbar !-)
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