/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
validere unik streng
Fra : Simon K


Dato : 15-04-05 20:06

Hej

Jeg er ved at lave en inputform, hvor jeg gerne vil validere et enkelt
felt (varenrfeltet) som skal være unikt - altså der må ikke oprettes et
varenummer hvis det allerede findes i databasen.

Dette kan man jo gøre med et kald til databasen og så tjekke om
varenummeret allerede er der (fx. via ASP). Men jeg vil gerne lave et
validerings Javascript, der lister de "optagede" varenumre i scriptet og
så validerer inputtet mod det onsubmit. valideringslisten vil jeg
generere med ASP.

Er der en, der kan vise mig (evt. linke) hvordan sådan et javascript laves?

pft. og venlig hilsen
Simon K

 
 
Jens Gyldenkærne Cla~ (15-04-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 15-04-05 22:15

Simon K skrev:

> Jeg er ved at lave en inputform, hvor jeg gerne vil validere
> et enkelt felt (varenrfeltet) som skal være unikt - altså der
> må ikke oprettes et varenummer hvis det allerede findes i
> databasen.

Varenumre er ofte monotonisk stigende - altså således at et nyt
nummer altid vil være større end alle eksisterende numre.

Hvis det gælder i dit tilfælde, kan du nøjes med at tjekke om
nummeret er større end den højeste værdi blandt de eksisterende
numre (trukket ud fra databasen).

Hvis du skal tjekke mod alle eksisterende numre, kan det hurtigt
blive en stor mundfuld for et javascript. Men ellers kan du lave et
tjek - fx via et array - mod alle eksisterende kombinationer.

En mere effektiv løsning kan være at anvende et regulært udtryk -
hvor udtrykket er det indtastede varenummer, og søgestrengen er en
sammensætning af samtlige varenumre (med et skilletegn der
garanterer at man ikke matcher på andet end hele varenumre).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Simon K (16-04-2005)
Kommentar
Fra : Simon K


Dato : 16-04-05 10:13

Jens Gyldenkærne Clausen wrote:
> En mere effektiv løsning kan være at anvende et regulært udtryk -
> hvor udtrykket er det indtastede varenummer, og søgestrengen er en
> sammensætning af samtlige varenumre (med et skilletegn der
> garanterer at man ikke matcher på andet end hele varenumre).

Hej Jens.
Det er præcis denne sidste mulighed jeg hælder til. Mine varenumre er
ikke fortløbende, da de kommer fra forskellige producenter (og nogle er
tal og andre indeholder bogstaver).
Jeg ved bare ikke hvordan man laver sådan et javascript. Kan du evt.
linke mig til et sted hvor denne funktion eksisterer eller er beskrevet?

Simon K (16-04-2005)
Kommentar
Fra : Simon K


Dato : 16-04-05 11:08

Simon K wrote:
> Jens Gyldenkærne Clausen wrote:
>
>> En mere effektiv løsning kan være at anvende et regulært udtryk -
>> hvor udtrykket er det indtastede varenummer, og søgestrengen er en
>> sammensætning af samtlige varenumre (med et skilletegn der
>> garanterer at man ikke matcher på andet end hele varenumre).
Ok, jeg tror faktisk jeg er meget tæt på.
Jeg stykkede nogle ting sammen og nåede frem til dette script:

<html>
<head>
<script type="text/JavaScript">

var longstring = ";123;12;34;"

function validateInput() {
var userInput = ";"+document.forms["new"].elements["varenr"].value+";";
if (userInput.indexOf(longstring)<1){
    alert(userInput + " er IKKE indeholdt i " + longstring)
    return false; // kun indtil skidtet virker selvfølgelig
    }
else {
   alert(userInput + " ER indeholdt i " + longstring)
    return false;
   }
}

</script>
</head>
<body>
<form action="gosomewhere.asp" method="post" name="new"
onsubmit="return validateInput(this);">

varenr: <input type="text" name="varenr">
<input type="submit" value="Tilføj">

</form>
</body>
</html>

Det virker desværre ikke! Den kan ikke finde ud af at "12" er indeholdt,
men godt at ";123;12;34;" er indeholdt.

Er jeg mon tæt på eller er "indexOf" ikke det rigtige at bruge? Skal man
bruge "match" med wildcards (og hvordan?) eller hvad?
pft. Venlig hilsen
Simon K

Jens Gyldenkærne Cla~ (16-04-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-04-05 10:43

Simon K skrev:

> Det er præcis denne sidste mulighed jeg hælder til. Mine
> varenumre er ikke fortløbende, da de kommer fra forskellige
> producenter (og nogle er tal og andre indeholder bogstaver).
> Jeg ved bare ikke hvordan man laver sådan et javascript.

Prøv at kigge her: <http://www.regular-expressions.info/>.

Du skal bruge et skilletegn som du er sikker på ikke optræder i et
varenummer (fx @, | eller :). Med det sammensætter du så dine
eksisterende varenumre:

   vn4234:xp2341:d30:20:23455:gbr34:xx99

Hvis du så lader ovenstående streng (med dine egne værdier
selvfølgelig) virke som kilde, og det indtastede varenummer som
regex (med skilletegnet sat foran og bagved) - kan du tjekke med
Match-metoden om varenummeret eksisterer.

Du bør dog stadig tjekke på serversiden om varenummeret eksisterer
- dels kan du få problemer med to personer der indtaster et nummer
ca. samtidig og dels kan javascript være slået fra på klienten.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Simon K (16-04-2005)
Kommentar
Fra : Simon K


Dato : 16-04-05 11:33

Jens Gyldenkærne Clausen wrote:
> Du bør dog stadig tjekke på serversiden om varenummeret eksisterer
> - dels kan du få problemer med to personer der indtaster et nummer
> ca. samtidig og dels kan javascript være slået fra på klienten.
Ja, så blev det ikke til meget javascript alligevel. Som både du og
Jonas påpegede, så kunne en langsom indtastning føre til forældede
valideringsstrings alligevel. Jeg løste problemet ved at validere med
ASP og så lave en javascript:alert samt history.back. Det er muligvis
ikke det mest elegante, men det er en let måde at sende brugeren tilbage
uden at slette indtastningerne. Eller er der mon oversete problemer i det?
/Simon K

Jens Gyldenkærne Cla~ (16-04-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-04-05 13:51

Simon K skrev:

> Er jeg mon tæt på eller er "indexOf" ikke det rigtige at bruge?

indexOf har ikke noget med regex at gøre - og du *skal* have fat i
regex for at løse dette problem fornufigt på klientsiden.

Se eksempler på det link jeg gav før.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jonas Schmeltz Aaber~ (16-04-2005)
Kommentar
Fra : Jonas Schmeltz Aaber~


Dato : 16-04-05 10:12

> Jeg er ved at lave en inputform, hvor jeg gerne vil validere et enkelt
> felt (varenrfeltet) som skal være unikt - altså der må ikke oprettes et
> varenummer hvis det allerede findes i databasen.
>
> Dette kan man jo gøre med et kald til databasen og så tjekke om
> varenummeret allerede er der (fx. via ASP). Men jeg vil gerne lave et
> validerings Javascript, der lister de "optagede" varenumre i scriptet og
> så validerer inputtet mod det onsubmit. valideringslisten vil jeg generere
> med ASP.
>
> Er der en, der kan vise mig (evt. linke) hvordan sådan et javascript
> laves?

Jeg synes personligt at det er problematisk, idét der kan komme nye poster i
databasen mens man udfylder formularen - og dermed er
JavaScript-valideringen ligegyldig.
En anden løsning ville være noget med en iframe der kalder et ASP-dokument,
som tjekker i databasen, og returnerer en JavaScript-variabel til sin
parent-frame.


MVH Jonas (aka Juke)



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste