Avatar billede flashnoob Nybegynder
06. januar 2007 - 19:59 Der er 21 kommentarer og
1 løsning

chek om input er alle tal, 8 eller 13 i længde

Hej
Som overskriften siger mangler jeg et javascript til at chekke om et input alle er tal og om der er 8 eller 13 characters.
Hvordan kan sådan et se ud?
Avatar billede coderdk Praktikant
06. januar 2007 - 20:10 #1
if ( felt.length == 8 || felt.length == 13 )
{
  alert("OK");
}
else
{
  alert("Skal være 8 eller 13 tegn langt!");
}
Avatar billede flashnoob Nybegynder
06. januar 2007 - 20:14 #2
Tak codedk :) Hvad så hvis der også skal chekkes for om alle char. er tal og ikke bogstaver?
Avatar billede coderdk Praktikant
06. januar 2007 - 20:16 #3
Det kan f.eks. gøre ved:

if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt.value ) == felt.value ) )
{
  alert("OK");
}
else
{
  alert("Skal være 8 eller 13 tegn langt, og være et tal!");
}
Avatar billede coderdk Praktikant
06. januar 2007 - 20:16 #4
Hov,

if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt.value ) == felt.value ) )

bør være:

if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt.value ) == felt.value )
Avatar billede mclemens Nybegynder
06. januar 2007 - 20:18 #5
if ( felt.value.length == 8 || felt.value.length == 13 )

...

parseInt(felt.value)

f.eks.:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta

http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><meta name="robots"

content="index, follow">

<script type="text/javascript">
function valider(){

felt=document.formnavn.feltet;

  if (( felt.value.length == 8 || felt.value.length == 13) && parseInt(felt.value))
  {
    alert("OK");
  }
  else
  {
    alert("Skal være 8 eller 13 tegn langt! - det skal være et tal");
  }

}
</script>

</head><body>
<form action="#" method="get" name="formnavn"><input type="text" name="feltet"></form><b onclick="valider();">Valider</b>
</body></html>
Avatar billede coderdk Praktikant
06. januar 2007 - 20:21 #6
True! Godt set mclemens :) Ellers var min forkert:

if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt ) == felt )

For så skal man jo bare:

felt = document.formnavn.feltet.value;

:-D
Avatar billede mclemens Nybegynder
06. januar 2007 - 20:24 #7
" felt = document.formnavn.feltet.value; "
Ja, det kunne man jo også :) - Det ville nok være
bedre hvis man ikke behøver sætte focus på elementet
... man sparer x-antal .value forespørgsler ...
Avatar billede mclemens Nybegynder
06. januar 2007 - 20:30 #8
Min var forkert med && parseInt(felt.value), ved
00000000 ville den melde fejl da 0 er det samme som false ...
Ellers ville den returnere NaN hvis der var andet end tal og
NaN ville virke på samme måde som en false ...

så &&  parseInt( felt.value ) == felt.value
eller &&  parseInt( felt ) == felt er bedre :)
Avatar billede coderdk Praktikant
06. januar 2007 - 20:31 #9
Aaah :-D
Avatar billede flashnoob Nybegynder
06. januar 2007 - 21:58 #10
Det virker fint! Dog bortset fra at jeg kan skrive 1234567w og så kommer der alligevel 'OK' I Alert-boxen..?
Avatar billede mclemens Nybegynder
06. januar 2007 - 22:04 #11
Virker fint hos mig, prøv denne:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><meta name="robots" content="index, follow">

<script type="text/javascript">
function valider(){

felt=document.formnavn.feltet.value;

  if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt ) == felt )
  {
    alert("OK");
  }
  else
  {
    alert("Skal være 8 eller 13 tegn langt! - det skal være et tal");
  }

}
</script>

</head><body>
<form action="#" method="get" name="formnavn"><input type="text" name="feltet"></form><b onclick="valider();">Valider</b>
</body></html>
Avatar billede flashnoob Nybegynder
06. januar 2007 - 22:09 #12
Jeg har dette nu, men nu virker det slet ikke:
i js.js

function valider(){

felt=document.productform.product_barcode;

  if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt ) == felt )
  {
    alert("OK");
  }
  else
  {
    alert("Skal være 8 eller 13 tegn langt! - det skal være et tal");
  }

}


i html'en:
<input type="text" id="product_barcode" name="product_barcode" style="width:100px" maxlength="13" onBlur="valider();">
Avatar billede flashnoob Nybegynder
06. januar 2007 - 22:11 #13
doh! -> felt=document.productform.product_barcode.value; :p
Avatar billede coderdk Praktikant
06. januar 2007 - 22:16 #14
Det er vist i øvrigt ikke god form at bruge _ i ID'er og navne ;)
Avatar billede mclemens Nybegynder
06. januar 2007 - 22:18 #15
Hmm, mener at det er ok at starte id, class
(og navne?) med a-z samt _ bare ikke 0-9 ...

- Husk at acceptere coderdk's svar :)
Avatar billede mclemens Nybegynder
06. januar 2007 - 22:21 #16
Hmm, forkert Clemme ... afhængig af doctype skal det vist varieres ...
(jeg mener _ istarten er ok i html, men det er ikke i xhtml)

http://www.w3.org/TR/xhtml1/#C_8

"Note that the collection of legal values in XML 1.0 Section 2.3, production 5 is much larger than that permitted to be used in the ID and NAME types defined in HTML 4. When defining fragment identifiers to be backward-compatible, only strings matching the pattern [A-Za-z][A-Za-z0-9:_.-]* should be used."
Avatar billede mclemens Nybegynder
06. januar 2007 - 22:26 #17
edit: afhængig af doctype skal det vist varieres ...
om _ er tilladt i starteb er vist afhængig af doctype ...

http://www.w3.org/TR/html4/types.html#h-6.2

"ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".")."

... Så _ var ok, bare ikke i starten - jeg husker ski ikke så godt :P
Avatar billede flashnoob Nybegynder
06. januar 2007 - 22:30 #18
okay?!
Men så er det godt at jeg bruger DTD HTML 4.01 Transitional :p Den validerer i hvert fald.
Men tak for hjælpen i to.
Kan en af jer evt forklare hvordan jeg klarer samme problem i php? Jeg har følgende, men det ser ikke ud til at virke:
ereg('/^([0-9]{8}|[0-9]{13})$', $_GET['barcodevalue']) ?
Avatar billede flashnoob Nybegynder
06. januar 2007 - 22:33 #19
heh.. er det mon fordi at Firefox dropper dem? Det gør den da hvis der er _ foran i CSS kode.
Avatar billede roenving Novice
21. januar 2007 - 11:47 #20
if(felt.value.match(/^\d{8}$/)||felt.value.match(/^\d{13}$/))

...
Avatar billede flashnoob Nybegynder
21. januar 2007 - 12:47 #21
Hej roenving.
Er dit forslag bedre, eller hvad er forskellen på det kontra: if ( ( felt.length == 8 || felt.length == 13 ) && parseInt( felt ) == felt )?
Avatar billede roenving Novice
21. januar 2007 - 14:23 #22
Tjah, bedre er det zq nok ikke, men en hel del mere overskueligt !o]

-- og så vil den også godkende 00000000 og 0000000000000 (selvom det nok ikke er aktuelt !-)

-- men i forhold til at genkende mønstre er det faktisk smart at bruge RegExps, da det så er genbrug i meget høj grad fra en validering til en anden ...

.match returnerer et array af gyldige matches fra tekststrengen, og vil derfor give ikke-null, når det er korrekt ...

-- og i den første står der at mønsteret skal starte helt fra tekststrengens start, indeholde præcis 8 tal (Digits) indtil slutningen af strengen !-)
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