Avatar billede mulles.tk Nybegynder
30. marts 2005 - 09:51 Der er 37 kommentarer og
1 løsning

validering af password

Skal bruge et script der validerer min formular. Alle felterne i formularen skal være udfyldt, og så skal der være specielle krav til password-feltet, som hedder 'pass' ... Dette må ikke indeholde æ ø å og skal være 8-cifret, og så skal feltet 'pass' og 'pass2' være identiske!!

Nogen der kan hjælpe?
Avatar billede bromer Nybegynder
30. marts 2005 - 10:18 #1
Du kan opbygge din formular med. Jeg har lige hurtigt lavet et check på om det første felt er udfyldt og om man har indtastet ens passwords, men du kan selv lave flere af samme stil.

<script type='text/javascript'>
function check_form() {
some_field = document.getElementById('some_field');
pass1 = document.getElementById('pass1');
pass2 = document.getElementById('pass2');
error = 0;

if (some_field.value.length == 0) {
  alert('Du skal udfylde some field');
  some_field.focus();
  error = 1;
}

if (error == 0 && pass1.value != pass2.value) {
  alert('Du skal indtaste samme passwords');
  pass2.focus();
  error = 1;
}

return (error == 0);
}
</script>
<form onsubmit='check_form()'>
<input type='text' name='some_field' id='somefield'/>
<input type='password' name='pass1' id='pass1'/>
<input type='password' name='pass2' id='pass2 />
<input type='submit'>
</form>
Avatar billede jih Nybegynder
30. marts 2005 - 10:27 #2
ellers til resten har jeg lige lavet det her:

<html>
<title>Eksperten Tests</title>
<head>
    <meta name="generator" content="Notepad.exe">
    <meta name="author" content="WebPsycho">
<script language="JavaScript">
function validate() {
tjek=/^[a-z][^æøå]/;
mNv=mainform.Navn.value;
if (mNv=='') {
alert('Dit navn skal skrives.');
event.returnValue=false;
}
if (!(mainform.Kon[0].checked || mainform.Kon[1].checked)) {
alert('Dit køn skal vælges.');
event.returnValue=false;
}
if (tjek.test(mainform.Navn.value)) {

} else {
alert("fejl");
}
if (mainform.Pass.value.length < 8) {
alert("dit password skal være mindst 8 tegn langt");
}
}
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="mainform" method="get" onsubmit="validate();">
<input type="text" name="Navn">
<input type="password" name="Pass">
<input type="radio" name="Kon" value="Mand">
<input type="radio" name="Kon" value="Kvinde">
<input type="submit">
</body>
</html>
Avatar billede jih Nybegynder
30. marts 2005 - 10:33 #3
ups.. glemte returnValue.false på resten... =S

erstat:

if (tjek.test(mainform.Navn.value)) {

} else {
alert("fejl");
}
if (mainform.Pass.value.length < 8) {
alert("dit password skal være mindst 8 tegn langt");
}

med:

if (tjek.test(mainform.Navn.value)) {

} else {
alert("fejl");
event.returnValue.false;
}
if (mainform.Pass.value.length < 8) {
alert("dit password skal være mindst 8 tegn langt");
event.returnValue.false;
}
Avatar billede yellow Nybegynder
30. marts 2005 - 11:35 #4
Synes ikke de ovenstående eksempler medtager æ,ø,å-kriteriet for passwords? Måske kan jeg bare ik se det...jeg ville gøre sådan her:

<html>
<head>
<script type="text/javascript">
  function validateForm( myForm ){
    blankReg = /^\s*$/;
    passReg = /^[^\sæøå]{8}$/;
    //check at Felt1 er udfyldt
    elm = myForm.Felt1;
    if( blankReg.test( elm.value ) ){
      alert("Felt1 skal udfyldes");
      elm.focus();
      return false;
    }
    //check at felt2 er udfyldt
    elm = myForm.Felt2;
    if( blankReg.test( elm.value ) ){
      alert("Felt2 skal udfyldes");
      elm.focus();
      return false;
    }
    //check at Pass1 er gyldigt
    elm = myForm.Pass1;
    if( !passReg.test( elm.value ) ){
      alert("Password skal være 8 tegn langt og må ikke indeholde mellemrum samt æ,ø og å");
      elm.focus();
      return false;
    }
    //check at Pass1 og Pass2 er ens
    elm = myForm.Pass2;
    if( elm.value != myForm.Pass1.value ){
      alert("Pass2 svarer ikke til indtastede Pass1");
      elm.focus();
      return false;
    }
    return true;       
  }
</script>
</head>
<body>
  <form onsubmit="return validateForm(this);">
    Felt1: <input type="text" name="Felt1"><br>
    Felt2: <input type="text" name="Felt2"><br>
    Pass1: <input type="password" name="Pass1"><br>
    Pass2: <input type="password" name="Pass2"><br>
    <input type="submit" value="submit">
  </form>
</body>
</html>
Avatar billede jih Nybegynder
30. marts 2005 - 11:53 #5
yellow: så må du vist læse mit indlæg en gang til?

<script language="JavaScript">
function validate() {
tjek=/^[a-z][^æøå]/; <--- skulle da ligne æ,ø,å-kriteriet?
mNv=mainform.Navn.value;
if (mNv=='') {
alert('Dit navn skal skrives.');
event.returnValue=false;
}
if (!(mainform.Kon[0].checked || mainform.Kon[1].checked)) {
alert('Dit køn skal vælges.');
event.returnValue=false;
}
if (tjek.test(mainform.Navn.value)) {

} else {
alert("fejl");
}
if (mainform.Pass.value.length < 8) {
alert("dit password skal være mindst 8 tegn langt");
}
}
</script>
Avatar billede yellow Nybegynder
30. marts 2005 - 12:03 #6
som du bruger på navn feltet?

if (tjek.test(mainform.Navn.value)) {

...var det der forvirrede mig lidt..
Avatar billede yellow Nybegynder
30. marts 2005 - 12:17 #7
anyway, hvis du bruger min, mulles.tk, så fandt jeg lige en fejl:
passReg = /^[^\sæøå]{8}$/;
skal ændres til:
passReg = /^[^\sæøå]{8}$/i;

(havde glemt at tage store ÆØÅ med)
Avatar billede jih Nybegynder
30. marts 2005 - 12:19 #8
nåår... beklager.. havde vist ikke læst spørgsmålet ordentligt.. ;-) så ikke det kun var password feltet der ikke skulle indeholde æ,ø og å... men... yellow.. din rettelse.. der er ikke nogen forskel?
Avatar billede jih Nybegynder
30. marts 2005 - 12:21 #9
øeh... mener.. jeg fik sat det på det forkerte felt.. eller noget :D
Avatar billede yellow Nybegynder
30. marts 2005 - 12:27 #10
Min rettelse var et lille "i" for enden af regexp = ignorecase.

Din tjek=/^[a-z][^æøå]/; kan jeg ikke rigtig få til at gi mening...
Den siger:
Første tegn skal være a til z
Næste tegn skal være noget der ikke er æ,ø eller å
Resten af tegnene er bedøvende ligegyldige...
Avatar billede mulles.tk Nybegynder
30. marts 2005 - 13:09 #11
Yellow - jeg kom til at tænke på, at det selvfølgelig heller ikke må indeholde specielle tegn, såsom ".,-' osv. osv. Så bare fra a-z (kun småbogstaver)
Avatar billede jih Nybegynder
30. marts 2005 - 16:04 #12
yellow.. nå da... undskyld :P er lige startet med det der.. kan ikke heelt finde ud af det, men kender det sådan ca.. men undskyld.. så ikke det i.. kiggede dog alligevel 4-5 gange igennem for at tjekke... det er lidt svært at se.. :P

men så må jeg til at lære mig noget mere om de tegn.. ;-P - slutter af..
Avatar billede mulles.tk Nybegynder
30. marts 2005 - 20:34 #13
yellow - skal dette oprettes for hvert felt:
    elm = myForm.Felt2;
    if( blankReg.test( elm.value ) ){
      alert("Felt2 skal udfyldes");
      elm.focus();
      return false;

...for der er altså en del felter, kan man ikke lave noget overordnet? :))

Har tidligere brugt dette script jeg fik lavet:
function check(f){

elm = f.elements;
str= "Følgende felter mangler at blive udfyldt:\n\n";
err = 0;

for (i=0;i<elm.length;i++){
if (elm[i].value.length==0){
  if(elm[i].name.charAt(elm[i].name.length-1)!="X"){
  str+=elm[i].felt+"\n";
  err++
  }
}
}

if(err>0){
  alert(str);
  return false
}else
  return true;
}
</script>

...som tjekker alle felter, hvor der ikke står et X i navnet (altså de valgfrie) og så skriver den hvilke der mangler at blive udfyldt! Problemet var bare jeg ikke kunne få den kombineret med password valideringen! :)
Avatar billede yellow Nybegynder
30. marts 2005 - 21:57 #14
De input felter du giver id="validate" bliver checket for om de er udfyldt.
Og password er lavet om til 8 tegn, kun a-z med små bogstaver

<html>
<head>
<script type="text/javascript">
  function validateForm( myForm ){
    blankReg = /^\s*$/;
    passReg = /^[a-z]{8}$/;   
    //check at alle elementer med id="validate" er udfyldt
    elements = myForm.elements;   
                for (i=0;i<elements.length;i++){
                        elm = elements[i];
                        if( elm.id == "validate" && blankReg.test( elm.value ) ){
                                alert( elm.name + " skal udfyldes");
                                elm.focus();
                                return false;
                        }
                }
    //check at Pass1 er gyldigt
    elm = myForm.Pass1;
    if( !passReg.test( elm.value ) ){
      alert("Password skal være 8 tegn langt og må kun indeholde tegene a-z");
      elm.focus();
      return false;
    }
    //check at Pass1 og Pass2 er ens
    elm = myForm.Pass2;
    if( elm.value != myForm.Pass1.value ){
      alert("Pass2 svarer ikke til indtastede Pass1");
      elm.focus();
      return false;
    }
    return true;       
  }
</script>
</head>
<body>
  <form onsubmit="return validateForm(this);">
    Felt1: <input type="text" id="validate" name="Felt1">*<br>
    Felt2: <input type="text" id="validate" name="Felt2">*<br>
    Felt3: <input type="text" id="validate" name="Felt3">*<br>
    Felt4: <input type="text" id="validate" name="Felt4">*<br>
    Felt5: <input type="text" name="Felt5"><br>
    Felt6: <input type="text" name="Felt6"><br>
    Felt7: <input type="text" id="validate" name="Felt7">*<br>
    Felt8: <input type="text" id="validate" name="Felt8">*<br>
    Felt9: <input type="text" id="validate" name="Felt9">*<br>
    Pass1: <input type="password" name="Pass1"><br>
    Pass2: <input type="password" name="Pass2"><br>
    <input type="submit" value="submit">
  </form>
</body>
</html>
Avatar billede mulles.tk Nybegynder
31. marts 2005 - 13:21 #15
Avatar billede mulles.tk Nybegynder
31. marts 2005 - 13:23 #16
sorry - har selvfølgelig glemt:
onsubmit="return validateForm(this);">

haha!!
Avatar billede mulles.tk Nybegynder
31. marts 2005 - 13:26 #17
...nu virker det det med validering af felterne i hvert fald, men lader ikke til at tjekke om passwordsne er ens?
Avatar billede mulles.tk Nybegynder
31. marts 2005 - 13:29 #18
Min fejl igen... du har jo brugt stort P ved Pass1 og Pass2 :))

Nå - men jeg siger mange tak, kan du ikke lige smide et svar... Jeg sætter pointene op til 100
Avatar billede mulles.tk Nybegynder
31. marts 2005 - 13:32 #19
...hvis jeg skulle ønske at ville ændre det til at password bare MIN. skal være 6 cifre, hvad skal så ændres?
Avatar billede yellow Nybegynder
31. marts 2005 - 15:48 #20
passReg = /^[a-z]{8}$/;  ( skal være 8 chars )
passReg = /^[a-z]{6,8}$/;  (skal være 6 til 8 chars )
passReg = /^[a-z]{6,}$/;  (6 chars eller mere )
Avatar billede roenving Novice
02. april 2005 - 15:19 #21
-- og det er ulovligt at give flere elementer samme unikke identifikator ...
Avatar billede jens_bach Nybegynder
02. april 2005 - 15:24 #22
Hvem vil lave validering på klient siden, det er for næmt at omgå !! lav det på server delen :)
Avatar billede roenving Novice
02. april 2005 - 15:30 #23
Man skal netop lave validering på klient-siden, for det er adskilligt mere brugervenligt !-)

-- men det betyder selvfølgelig ikke, at man kan tillade sig at undvære sin server-side validering af kritiske data !o]
Avatar billede mulles.tk Nybegynder
03. april 2005 - 17:05 #24
roenving > er der noget 'ulovligt' ved scriptet!?

Validering af server-delen!? Hvordan foregår det lige, jeg ved godt at jeg skal have lavet et eller andet der tjekker om brugernavnet allerede eksisterer, kan det gøres via et script også eller skal det bare være med if() ...? Vil du/I løse det hvis jeg opretter et nyt spørgsmål?
Avatar billede mulles.tk Nybegynder
03. april 2005 - 17:14 #25
just kill me - har lavet en lign validering af brugernavnet, men der må det godt være muligt at bruge tal, så hvordan skal den lige udformes...?
Avatar billede roenving Novice
03. april 2005 - 17:44 #26
Du skal i dit php-script teste, at der ikke er ulovligheder i indtastede data, f.eks. ved at en bruger har omgået din form på websiden ...

-- og det værste, der kan ske, er at en har indtastet sql-kode, som kan korrumpere din database eller skaffe ham adgang, hvor han ikke skulle (sql-injection !-)

-- en simpel udgave, som tillader mindst 6 bogstaver (store og små), tal og _

nameReg = /^\w{6,}$/i;

-- begrebet bogstaver fortolkes en anelse forskelligt i forskellige browsere, så f.eks. æøå accepteres i Mozilla, hvilket det ikke gør i IE, men så skal du alligevel teste data før de indsættes i databasen, så der vil du kunne fange ugyldige tegn, hvis de skulle slippe igennem !-)
Avatar billede mulles.tk Nybegynder
03. april 2005 - 18:32 #27
jeg opretter lige et andet spørgsmål ang. det... For ved ikke helt præcis hvordan den test skal se ud.... hehe

Kan man ikke bare lige lave denne om, så den også indeholder tallene 0-9:
passReg = /^[a-z]{6,}$/;
Avatar billede roenving Novice
03. april 2005 - 18:34 #28
Jo !-)

nameReg = /^[a-z\d]{6,}$/;
Avatar billede mulles.tk Nybegynder
20. april 2005 - 09:19 #29
emailReg = /^[@]$/;

...hvordan skal den se ud, hvis man vil tjekke om der er indtastet '@' i feltet??? Som jeg har lavet den der melder den fejl uanset om der er eller ej...
Avatar billede roenving Novice
21. april 2005 - 00:12 #30
En simpel validering af en email-adresse kunne se sådan ud:

emailReg = /^.*@\w(\w\.-)*\.[a-z]{2-6}$/;
Avatar billede mulles.tk Nybegynder
21. april 2005 - 13:39 #31
ser vældig fin ud, men er der ikke et sted man kan læse om de forskellige funktioner, så man forstår hvad der er hvad? Hvad betyder {2-6} ??
Avatar billede roenving Novice
22. april 2005 - 11:21 #32
Hov, det var en fejl ...

-- og der var flere af dem ,-(

emailReg = /^.*@\w[\w\.-]*\.[a-z]{2,6}$/;

-- og vi kan splitte udtrykket op, så du kan se, hvad den gør:

// er afgrænsere af regexps, ligesom man bruger "" eller ' til tekststrenge

^$ betyder hhv. start og slut af teksten, og betyder altså at samtlige tegn i den skal medtages i evalueringen

. betyder en hvilketsomhelst karakter

* betyder 0 eller flere tegn, og betyder altså her, at vi er bedøvende ligeglade med hvad der kommer før @-tegnet (da der alligevel ikke er nogle globale standarder, som skal overholdes der !-)

@ skal tages bogstaveligt, da det ikke har nogen special-betydning i regexps

\ er escape-karakter, og betyder at det efterfølgende tegn enten skal tages bogstaveligt (hvis det er en anden special-karakter, f.eks. . eller $ !-), eller at der kommer en speciel escape-sekvens ...

\w er netop en speciel escape-sekvens, som betyder ord-tegn, hvilket i alle udgaver af ECMA-script betyder a-z, 0-9 og _ både store og små, men i nogle udgaver også inkluderer locale-specifíkke tegn, f.eks. accepterer Gecko-browserne æøåÉ osv.

-- der skal være et af disse tegn, som det første efter @-tegnet, så den er lige smidt på før den næste

[] betyder at alle tegn indenfor kan forekomme (medmindre de er mærket som ikke forekomme ved at første tegn indeni er ^ !-)

Så [\w\.-]* betyder altså, at vi vil acceptere en hvilkensomhelst tegnfølge (0 til uendelig lang), som kun indeholder tegnene a-zA-Z0-9_.-

-- bemærk her, at . skal escapes, da det _skal_ tages bogstaveligt, ofte ville man også have brug for at escape - da det også bruges til at betegne tegn-sekvenser (se senere !-)

-- så skal vi have et punktum, derfor \.

[a-z] betyder så, at vi vil tillade et hvilketsomhelst bogstav i sekvensen fra a til z (her ses bindestregens rolle !-)

{} er den fjerde måde at angive hvor mange af noget man vil acceptere:

? betyder 0 eller 1 forekomst
* betyder 0 eller flere forekomster
+ betyder 1 eller flere forekomster
{} betyder, at man selv kan angive i tal, hvilken længde, man vil acceptere ...

? er det samme som {0,1} eller {,1}
* er det samme som {0,}
+ er det samme som {1,}

{2} betyder længden skal være præcis 2
{2,} betyder at længden skal være mindst 2
{,2} betyder at længden kan være op til 2
{2,48} betyder så at længden skal være mellem 2 og 48 !o]

-- så {2,6} betyder altså, at der skal være mindst 2 og højest 6 tegn af den foregående definition, fordi top-domæne-navne har den længde (eks. .dk, .tv, .com, .museum !-)
Avatar billede mulles.tk Nybegynder
25. april 2005 - 17:39 #33
Wow... cool, mange tak, tror jeg forstår det!
Avatar billede mulles.tk Nybegynder
26. april 2005 - 13:33 #34
Sorry jeg spørger så meget, men det er til en rapport:
passReg = /^[a-z\d]{6,}$/;

\d = tal??
Avatar billede mulles.tk Nybegynder
26. april 2005 - 14:06 #35
Har lige lidt mere

'passReg.test' ...hvad står .test for?

'blankReg = /^\s*$/;' ...hvilken betegnelse har s?
Avatar billede yellow Nybegynder
26. april 2005 - 14:16 #36
\d er "digits" =tal = [0-9]

.test er bare en funktion du kalder på en regular expression.
/\d/.test('abc1def') ->returnerer true fordi 1 tallet matcher på /\d/

\s er whitespace. Det varierer lidt fra sprog til sprog hvad den præcist dækker over.
Er som regel altid mellemrum og tab. I nogle sprog er linefeed, carriage return og "ikke-printbare-tegn" også med under \s.
Avatar billede mulles.tk Nybegynder
26. april 2005 - 23:30 #37
elements = myForm.elements;   
      for (i=0;i<elements.length;i++){
                elm = elements[i];

<< tror dette er det sidste jeg ikke helt forstår, men I har været MEGET behjælpelige!!!
Avatar billede yellow Nybegynder
27. april 2005 - 00:04 #38
er bare en løkke der kører igennem samtlige form elements.
Dvs alle <input =...>, <textarea..> etc. tags.
I hver gennemgang af løkken bliver det enkelte form-element sat til "elm"-variablen.
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

IT-JOB