Avatar billede angelenglen Nybegynder
13. juni 2012 - 11:52 Der er 8 kommentarer og
1 løsning

ASP: Oversæt javascript validering til ASP serverside validering

Jeg har nedenstående valideringsscript som via Javascript validerer et password for følgende kriterier:

1. længde på minimum 6 tegn
2. indeholder mindst 1 lille bogstav
3. indeholder mindst 1 stort bogstav
4. indeholder mindst 1 tal *eller* 1 specialtegn
(der må gerne være både tal og specialtegn)

Nogen der kan hjælpe mig med det?
Jeg har nemlig ikke rigtigt styr på regex osv. i ASP.
(hvis det kan gøres lettere end via regex, er det også ok)


Her er scriptet:



function validatePassword(pw) {
    // Based on: http://blog.stevenlevithan.com/archives/javascript-password-validator
    var o = {
        lower:    1,
        upper:    1,
        numeric:  1,
        special:  1,
        length:  6
    };
   
    var    re = {
            lower:  /[a-zæøå]/g,
            upper:  /[A-ZÆØÅ]/g,
            numeric: /[0-9]/g,
            special: /[\W_]/g
        },
        rule, i;

    // enforce min/max length
    if (pw.length < o.length) {
        return false; //password er for kort.
    }

    // enforce lower/upper/numeric/special rules
    for (rule in re) {
        if ((rule == "numeric") || (rule == "special")) {
            var numMatch = ((pw.match(re["numeric"]) || []).length < o["numeric"]);
            var speMatch = ((pw.match(re["special"]) || []).length < o["special"]);
            if ((numMatch == true) && (speMatch == true)) {
                return false //der er hverken nummer eller specialtegn.
            }
        } else {
            if ((pw.match(re[rule]) || []).length < o[rule]) {
                return false; //der mangler enten stort eller lille bogstav
            }
        }
    }

    // great success!
    return true;
}
Avatar billede softspot Forsker
13. juni 2012 - 12:09 #1
Prøv at lege lidt med dette kode:

<%
function PwdTjekker(pwd)
  dim rx
  set rx = new RegExp

  rx.Pattern = "[a-zæøå0-9\W_]{6,}"
  rx.Global = true
  rx.IgnoreCase = true
  PwdTjekker = rx.Test(pwd)
end function


function testPwd(pwd, expected) 
  response.Write "Tester: [" & pwd & "]... "
  if PwdTjekker(pwd) = expected then
    response.Write "OK"
  else
    response.Write "FEJL!"
  end if
 
  response.Write "<br>"
end function


' Test af funktionen
testPwd "", false      ' for kort og ikke med alle krævede tegn
testPwd "a1!A", false  ' for kort
testPwd "AaB23!", true  ' OK

%>

Funktionen der tester hedder PwdTjekker (den fremhævede). Resten er et test-setup, så du kan forsøge med nogle forskellig kombinationer af kodeord. Du skal blot tilføje dine egne tests i bunden, ved at kalde testPwd med kodeordet du vil have testet og så det forventede resultat af det tjek...
Avatar billede softspot Forsker
13. juni 2012 - 12:17 #2
Ja, så må jeg jo erkende at mine tests ikke var gode nok :-)

Du får lige en opdateret funktion, som også tager hånd om kodeord som er lange nok, men ikke indeholder alle de forskellige tegn-grupper:

function PwdTjekker(pwd)
  dim rx, reqPatrn, patrn, res
  set rx = new RegExp
  reqPatrn = array("[a-zæøå]", "[0-9]", "[\W_]")
 
  res = true

  rx.Global = true
  rx.IgnoreCase = true
  for each patrn in reqPatrn
    rx.Pattern = patrn
    res = res and rx.Test(pwd)
  next
 
  PwdTjekker = res and len(pwd) >= 6
end function

Testen til at validere dette kunne se således ud:

testPwd "lkjsdflkj", false
Avatar billede softspot Forsker
13. juni 2012 - 12:25 #3
Nå, der kommer flere rettelser. Linjen med reqPatrn skal lige ændres til dette:

  reqPatrn = array("[a-zæøå]", "[0-9\W_]")

Tests til at verificere dette kunne se således ud;

testPwd "lkALK54", true 
testPwd "lkOgFasd!#", true
Avatar billede angelenglen Nybegynder
13. juni 2012 - 13:05 #4
Very nice, den virker.

Jeg lagde dog lige minimumslængden ind i en variabel, ved godt det ikke gør nogen forskel, men jeg kan bedre lide det sådan ;-)

Du må meget gerne lægge et svar for points!!

Function PwdTjekker(pwd)
  Dim rx, reqPatrn, patrn, res, minlengtn
  Set rx = New RegExp
  reqPatrn = array("[a-zæøå]", "[0-9\W_]")
  minlengtn = 6
  res = True

  rx.Global = True
  rx.IgnoreCase = True
  For Each patrn In reqPatrn
    rx.Pattern = patrn
    res = res And rx.Test(pwd)
  Next
 
  PwdTjekker = res And len(pwd) >= minlengtn
End Function




Ps. hvordan får du din kode til at stå i en boks? har prøvet med både quote og code BB-koderne, de bliver bare ignoreret :-/
Avatar billede softspot Forsker
13. juni 2012 - 13:42 #5
Hvis en konstant værdi skal benyttes mere end ét sted i koden og den har samme betydning i de forskellige kontekster, vil jeg helt klart også foretrække at den ligger i en const eller en variabel... men det var ikke tilfældet, så derfor blev den bare brugt direkte.

Du kan få den blå kasse ved at bruge div i stedet for code. pre fungerer også til at generere tekst i monospace-font :-)
Avatar billede softspot Forsker
13. juni 2012 - 13:42 #6
Du får lige et svar.
Avatar billede angelenglen Nybegynder
13. juni 2012 - 13:55 #7
Hvis en konstant værdi skal benyttes mere end ét sted i koden og den har samme betydning i de forskellige kontekster, vil jeg helt klart også foretrække at den ligger i en const eller en variabel... men det var ikke tilfældet, så derfor blev den bare brugt direkte.


Helt enig - nogle gange er det bare lettere at finde frem til tallet senere, hvis fx minimum-kravet for længde hæves fra 6 til 8 tegn senere :-)

Og tak for hjælpen vedr. div-tagget.
-pre virker dog ikke for mig.

Function PwdTjekker(pwd)
  Dim rx, reqPatrn, patrn, res, minlengtn
  Set rx = New RegExp
  reqPatrn = array("[a-zæøå]", "[0-9\W_]")
  minlengtn = 6
  res = True

  rx.Global = True
  rx.IgnoreCase = True
  For Each patrn In reqPatrn
    rx.Pattern = patrn
    res = res And rx.Test(pwd)
  Next
  Set rx = Nothing
  PwdTjekker = res And len(pwd) >= minlengtn
End Function
Avatar billede softspot Forsker
13. juni 2012 - 15:34 #8
Velbekomme og tak for point!

kol1      kol2
awwd      1 3 3
ab        123 5
a .d      12 45
-bi      --345


Umiddelbart fungerer pre fint herfra :-)
Avatar billede angelenglen Nybegynder
13. juni 2012 - 15:36 #9
Fair nok, i så fald virkede det nok egentligt også for mig.

Jeg havde bare forventet at der ville komme en firkant rundt om, derfor så jeg ikke at det virker.

Tjekker lige om det kan kombineres:
kol1      kol2
awwd      1 3 3
ab        123 5
a .d      12 45
-bi      --345


Det kan det, nice :-)
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
Kurser inden for grundlæggende programmering

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