---
title: "Lite annorlunda validering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/135709-lite-annorlunda-validering"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "l-boy"
published: "2005-10-14T09:07:15.000Z"
updated: "2005-10-14T12:06:46.000Z"
replies: 12
views: 493
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/135709-lite-annorlunda-validering"
---

# Lite annorlunda validering

## #1 — l-boy, 2005-10-14T09:07Z

Har ett formulär som innehåller ett ex antal fält, runt 10-20st som kallas för "lagX" där X är en siffra mellan 1-16 t.ex.

Innan detta postas vill jag gå igenom samtliga fält och kolla 2 saker.

1\. Måste vara ett heltal mellan 1 och X.
2\. Samma tal får inte förekomma 2 ggr.

Hur gör man detta tro?

Permalänk: https://www.webforum.nu/p/135709

## #2 — Peter S, 2005-10-14T09:50Z

Vet inte om jag förstått dig rätt

```
<script type="text/javascript">

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

</script>

<form onsubmit="return v(this)">
  <input type="text" name="lag1">
  <input type="text" name="lag2">
  <input type="text" name="lag3">
  <input type="text" name="lag4">
  <input type="text" name="lag5">
  <input type="text" name="lag6">
  <input type="text" name="lag7">
  <input type="text" name="lag8">
  <input type="text" name="lag9">
  <input type="text" name="lag10">
  <input type="text" name="lag11">
  <input type="text" name="lag12">
  <input type="text" name="lag13">
  <input type="text" name="lag14">
  <input type="text" name="lag15">
  <input type="text" name="lag16">
  <input type="submit">
</form>
```

Permalänk: https://www.webforum.nu/p/1687545

## #3 — l-boy, 2005-10-14T10:08Z

Tror du har förstått mig rätt. Men det händer inte så mycket när jag försöker köra kåden.

```

<script language="JavaScript">
<!--

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^[2-9]|(1[0-6]?)$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		

osv...		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
```

Permalänk: https://www.webforum.nu/p/1687548

## #4 — Peter S, 2005-10-14T10:34Z

Vad är det som inte fungerar? Variabeln X sätter du till antalet "lag"-fält. I mitt exempel är det 16, så med din kod blir det:

```
<script language="JavaScript">
<!--

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	
<input type="text" name="lag6" maxlength="2" size="2" value="1">
<input type="text" name="lag7" maxlength="2" size="2" value="1">	
<input type="text" name="lag8" maxlength="2" size="2" value="1">	
<input type="text" name="lag9" maxlength="2" size="2" value="1">
<input type="text" name="lag10" maxlength="2" size="2" value="1">	
<input type="text" name="lag11" maxlength="2" size="2" value="1">	
<input type="text" name="lag12" maxlength="2" size="2" value="1">
<input type="text" name="lag13" maxlength="2" size="2" value="1">	
<input type="text" name="lag14" maxlength="2" size="2" value="1">	
<input type="text" name="lag15" maxlength="2" size="2" value="1">
<input type="text" name="lag16" maxlength="2" size="2" value="1">	
		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
```

Om du nu har 16 sådana fält.

Permalänk: https://www.webforum.nu/p/1687558

## #5 — l-boy, 2005-10-14T10:40Z

Ah mitt fel. Gjorde ju om skiten i natt minns jag ;) Nu heter fälten inte alltid lag1-lag16 etc. Utan siffran på slutet kan variera lite. Doh. Blire svårt då?

Permalänk: https://www.webforum.nu/p/1687563

## #6 — Peter S, 2005-10-14T10:49Z

Vilka kriterier är det med andra ord som gäller?

Permalänk: https://www.webforum.nu/p/1687571

## #7 — l-boy, 2005-10-14T10:55Z

Eller förresten. Jag gör om det på nytt istället. Tack så mycket för hjälpen!!

Permalänk: https://www.webforum.nu/p/1687574

## #8 — l-boy, 2005-10-14T11:20Z

Så nu går skriptet igång och fälten heter lag1-lagX. Men inmatningen funkar inte alltid som den skall. Den klagar på att ett värde redan existerar trots att det inte använts innan. Använder mig av x=5 men det har väl ingen betydelse antar jag, och såklart bara fem fält, lag1-lag5.

Permalänk: https://www.webforum.nu/p/1687590

## #9 — Peter S, 2005-10-14T11:22Z

Ser det ut enligt nedan då?

```
<script language="JavaScript">
<!--

var X = 5;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	

		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
```

Permalänk: https://www.webforum.nu/p/1687592

## #10 — l-boy, 2005-10-14T11:25Z

Exakt. Fast value är satt till 1 på lag1, 2 på lag 2, 3 på lag3 osv. Som standard. Men så fort jag börjar flytta om ordningen blir det tokigt.

Value 4 already exists for lag5, trots att lag5 är enda fältet som tilldelats en 4 etc.

Permalänk: https://www.webforum.nu/p/1687595

## #11 — Peter S, 2005-10-14T11:36Z

Oops! Så här skall det vara:

```
function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^[1-5]$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(parseInt(elms["lag" + i].value));
    }
  }
  return true;
}
```

Permalänk: https://www.webforum.nu/p/1687602

## #12 — l-boy, 2005-10-14T11:38Z

Nuså! Tackar och bockar!

Eller en liten sak till förresten, om X varierar från gång till gång måste det väl gå att ha det som ett argument i funktionen va?

Permalänk: https://www.webforum.nu/p/1687605

## #13 — Peter S, 2005-10-14T12:06Z

Ett exempel på hur det kan se ut då:

```
<script language="JavaScript">
<!--

function v(o, x){
  var elms = o.elements,
      acc  = [],
      re   = "^([1-";

  if (x < 10){
    re += x + "])$";
  } else {
    re += "9]";

    for (var i = 0; i < Math.floor(x / 10); ++i){
      re += "|(" + (i + 1);
      re += "[0-" + (i + 1 >= Math.floor(x / 10) ? (x % 10) : 9) + "]";
      re += ")";
    }

    re += ")$";
  }

  for (var i = 1; i <= x; ++i){
    if (!new RegExp(re).test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + x + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(parseInt(elms["lag" + i].value));
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this, 16);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	
<input type="text" name="lag6" maxlength="2" size="2" value="1">
<input type="text" name="lag7" maxlength="2" size="2" value="1">	
<input type="text" name="lag8" maxlength="2" size="2" value="1">	
<input type="text" name="lag9" maxlength="2" size="2" value="1">
<input type="text" name="lag10" maxlength="2" size="2" value="1">	
<input type="text" name="lag11" maxlength="2" size="2" value="1">	
<input type="text" name="lag12" maxlength="2" size="2" value="1">
<input type="text" name="lag13" maxlength="2" size="2" value="1">	
<input type="text" name="lag14" maxlength="2" size="2" value="1">	
<input type="text" name="lag15" maxlength="2" size="2" value="1">
<input type="text" name="lag16" maxlength="2" size="2" value="1">

<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
```

Permalänk: https://www.webforum.nu/p/1687621

---

Tråden på webben: https://www.webforum.nu/amne/javascript/135709-lite-annorlunda-validering
