Avatar billede public2 Nybegynder
05. november 2008 - 11:15 Der er 7 kommentarer og
1 løsning

Form validering: kun tal og kommatal

Hej alle,

jeg har et spørgsmål vedrørende en form validering. Kort fortalt, så har jeg en form med nogle forskellige input tekst-felter.

Et af disse felter er et procent felt, hvor brugeren kan skrive fra 0 til 100, men også kan bruge kommatal, dvs. at de kan skrive 12,5 også.

Men det går ikke hvis de skriver over 100 eller bogstaver. Jeg har prøvet en JavaScript validator, men synes ikke at kunne få den til at virke... Den ser sådan her ud:

<script type='text/javascript'>

function ValidateForm(FormNavn)
{

  if(IsEmpty(FormNavn.procent))
  {
      alert('You have not entered an account number')
      FormNavn.procent.focus();
      return false;
  }


  if (!IsNumeric(FormNavn.procent.value))
  {
      alert('Please enter only numbers or decimal points in the account field')
      FormNavn.procent.focus();
      return false;
      }

return true;

}
</script>

Navnet på formen er "FormNavn" og navnet på mit input tekst-felt er "procent". Ind til videre har jeg bare forsøgt at tjekke for, om der er andet end tal der bliver skrevet ind i input feltet.

Nede i min form på HTML siden har jeg så tilføjet dette på mit form tag:

onsubmit="java script:return ValidateForm(this)">

Jeg er ikke helt sikker på at jeg for det første gør det rigtigt og for det andet, bruger den bedste metode til at gøre det.

Hvis der er en anden som har en god valideringsmetode eller script, så hører jeg med interesse.

På forhånd tak for jeres tid og hjælp

Mvh
Public2
Avatar billede roenving Novice
05. november 2008 - 12:10 #1
Parameter-navnet er misvisende, da du jo overfører selve formen, men ellers bruger du jo variablen rigtigt ...

Hvad er IsEmpty og IsNumeric ?-)

-- men f.eks.

<script type='text/javascript'>

function ValidateForm(FormNavn){
  if(!FormNavn.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){
      alert('Please enter only numbers or decimal points in the account field')
      FormNavn.procent.focus();
      return false;
  } return true;
}
</script>

-- og så bør kaldet se således ud:

<form ... onsubmit="return ValidateForm(this)">

-- da det er overflødigt at fortælle javascript-fortolkeren, at den skal behandle script i en script-event som script !-)
Avatar billede public2 Nybegynder
05. november 2008 - 12:17 #2
Hej Roenving,

fantastisk - nu virker det bare præcis som det skal. Tusind tak for din hjælp...

Den metode jeg skrev overstående var hentet fra en hjemmeside, så tænkte nok at der var en masse som ikke nødvendigvis var brug for. Men nu spiller det bare.

Hvis du vil smide et svar, så får du - meget velfortjent - pointene.
Avatar billede public2 Nybegynder
05. november 2008 - 12:24 #3
Må jeg lige hurtig komme med et spørgsmål til???

Hvis jeg har et par stykker andre input felter hvor der også kun må bruges tal, men også over 100, kan jeg så skrive det:

<script type='text/javascript'>

function ValidateForm(addActivity){
  if(!addActivity.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){
      alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100')
      addActivity.procent.focus();
      return false;
  }
  if(!addActivity.enheder.value.match(/^([1-9]?\d(,\d)?)$/)){
      alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100')
      addActivity.enheder.focus();
      return false;
  }
  if(!addActivity.int1.value.match(/^([1-9]?\d(,\d)?)$/)){
      alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100')
      addActivity.int1.focus();
      return false;
  }
  if(!addActivity.int2.value.match(/^([1-9]?\d(,\d)?)$/)){
      alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100')
      addActivity.int2.focus();
      return false;
  } return true;

}
</script>

Jeg har i de tre andre slettet 100| men ved ikke helt om jeg "kan" det for at det skal virke...
Avatar billede roenving Novice
05. november 2008 - 12:59 #4
-- nej så skal du skrive f.eks.

  if(!addActivity.enheder.value.match(/^[1-9]?\d+(,\d?)$/)){//+ betyder en eller flere, så det er uendeligt !-)
      alert('Skriv kun tal og decimal tal i dette felt og gerne over 100')
      addActivity.enheder.focus();
      return false;
  }

Eller:

  if(!addActivity.enheder.value.match(/^[1-9]?\d{1,2}(,\d?)$/)){//{1,2} betyder en eller 2, så det er op til 999 !-)
      alert('Skriv kun tal og decimal tal i dette felt og gerne over 100')
      addActivity.enheder.focus();
      return false;
  }

-- els velbekomme '-)
Avatar billede roenving Novice
05. november 2008 - 12:59 #5
-- og ups, det var en forkert parantes, jeg fik fjernet:

  if(!addActivity.enheder.value.match(/^[1-9]?\d+(,\d)?$/)){//+ betyder en eller flere, så det er uendeligt !-)

  if(!addActivity.enheder.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2} betyder en eller 2, så det er op til 999 !-)
Avatar billede public2 Nybegynder
05. november 2008 - 14:06 #6
Jeg har prøvet dit nye forslag, men synes ikke at jeg kan få det til at virke...

Den hedder i mit java script:

<script type='text/javascript'>

function ValidateForm(addActivity){
  if(!addActivity.procent.value.match(/^(100|[1-9]?\d(,\d)?)$/)){
      alert('Skriv kun tal og decimal tal i dette felt og mellem 0 og 100')
      addActivity.procent.focus();
      return false;
  }

  if(!addActivity.enheder.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2}
      alert('Skriv kun tal og decimal tal i dette felt og gerne over 100')
      addActivity.enheder.focus();
      return false;
  }

  if(!addActivity.int1.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2}
      alert('Skriv kun tal og decimal tal i dette felt og gerne over 100')
      addActivity.int1.focus();
      return false;
  }

  if(!addActivity.int2.value.match(/^[1-9]?\d{1,2}(,\d)?$/)){//{1,2}
      alert('Skriv kun tal og decimal tal i dette felt og gerne over 100')
      addActivity.int2.focus();
      return false;
  }

    return true;

}
</script>

Jeg har brugt dit sidste forslag, hvor det er op til 999, tror ikke de får brug for mere end det...

Men det virker ikke, jeg får bare en sædvanlig fejlmeddelse at jeg forsøger at indsætte en string i et int felt...
Avatar billede roenving Novice
05. november 2008 - 15:43 #7
Øeh ...

-- prøv at vise det (et link ?-)
Avatar billede public2 Nybegynder
06. november 2008 - 14:35 #8
Hej igen,

det virker eller dvs. det virker det meste af tiden.

På min side har jeg en drop-down liste med en masse forskellige typer aktiviteter. Når man så trykker på en aktivitet dukker den op med en form, der består af forskellige input-felter, dog med det tilfælles, at de fleste af dem har et input-felt ved navn "enheder". Og i alle på nær 2 aktiviteter (af hvad jeg indtil videre har testet mig frem til) virker valideringen ikke. Jeg har ingen fornuftig forklaring og har ingen idé om hvorfor det ikke virker der.

Men under alle omstændigheder, så virker det på de fleste andre aktiviteter.
Det er et intranet system, så har desværre ikke mulighed for at lave et link.
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