Avatar billede jl4511 Nybegynder
06. januar 2007 - 14:30 Der er 33 kommentarer og
2 løsninger

Password validering

Hej

Jeg skal bruge en reg.exp til at kontrollere password.
Programmeringssprog PHP.

Password skal:
1. være på MINDST 8 tegn.
2. indeholde BÅDE tal og bogstaver (a-z)
3. indeholde BÅDE store og små bogstaver.

Er der nogen der kan hjælpe?
Avatar billede kalp Novice
06. januar 2007 - 14:43 #1
^[a-zA-Z0-9]{8,8}$


det tætteste.. og det sidse 9 tal er maks længde
Avatar billede jl4511 Nybegynder
06. januar 2007 - 14:55 #2
Desværre... den slipper passwords igennem som enten består af..
kun små bogstaver
kun store bogstaver
kun tal

Det SKAL være en blanding af alle tre!
Avatar billede jl4511 Nybegynder
06. januar 2007 - 14:58 #3
Hvis ellers jeg har gjort det korrekt, selvfølgelig? :o)
Nedenstående viser "Korrekt", selvom der kun er små bogstaver.

$pw = "abcdefghi";
$pattern = "^[a-zA-Z0-9]{8,16}$";
if (eregi($pattern,$pw)) {
  echo "Korrekt";
} else {
  echo "Forkert";
}
Avatar billede kalp Novice
06. januar 2007 - 15:03 #4
ja det her burde vel tage højde for at der er både tal og bogstaver

$pw = "abcdefghi";
$pattern  = "/([a-zA-Z])/";
$pattern2 = "/([0-9])/)";
if (eregi($pattern,$pw) && eregi($pattern2,$pw)) {
  echo "Korrekt";
} else {
  echo "Forkert";
}

hvis det virker kan du vel lave det sidste tjek på længden.
Avatar billede kalp Novice
06. januar 2007 - 15:10 #5
"^(?=.*\d).{8,}$"

gør vidst det samme.. men der tages bare ikke højde for store og små.
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:18 #6
Nu er jeg jo ikke ekspert i reg.exp...
men siger den første ikke at det skal være små eller store bogstaver, og den anden at det skal være tal?
Kombineret vil de jo aldrig blive opfyldt, eller...?
Avatar billede kalp Novice
06. januar 2007 - 15:24 #7
jeg har testet denne ^(?=.*\d).{8,}$
og den virker.. prøver at gennemskue hvordan man lige tager højde for det sidste... hvis jeg kan
Avatar billede kalp Novice
06. januar 2007 - 15:26 #8
måske denne;)

^(?=.*\d).{8,}.[A-Z]$
Avatar billede kalp Novice
06. januar 2007 - 15:28 #9
$pw = "abcdefghi";
$pattern = "^(?=.*\d).{8,}.[A-Z]$";
if (eregi($pattern,$pw)) {
  echo "Korrekt";
} else {
  echo "Forkert";
}

skulle udskrive forkert

$pw = "abcdefghiDDD";

skulle udskrive forkert


$pw = "a2DE";

forkert

ja ser ud til at den virker:)
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:28 #10
Warning: eregi(): REG_BADRPT in....
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:32 #11
a2DE skulle give "Korrekt" jo
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:33 #12
Nej, sorry... skal jo være min. 8 !
Avatar billede kalp Novice
06. januar 2007 - 15:33 #13
hvorfor det? du sagde mindst 8 tegn
Avatar billede kalp Novice
06. januar 2007 - 15:34 #14
den virker... men php har svært ved at læse den... så der skal sikkert nogle

\ ind i den men der skal du nok forsøge dig frem
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:35 #15
Ok, jeg prøver at lege lidt med den. Foreløbig tak.
Avatar billede kalp Novice
06. januar 2007 - 15:40 #16
sorry.. sådan her så er den perfekt:)

^(?=.*\d).{8,}.([a-zA-Z0-9])$

før skulle password slutte med et stort tegn.. nu må det også slutte med et lille eller tal.
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:41 #17
Satte en \ foran ?, så nu får jeg ikke den WARNING,
men den virker ikke... den giver "Forkert" på nedenstående!

$pw = "abc123ABC";
$pattern = "^(\?=.*\d).{8,}.[A-Z]$";
if (eregi($pattern,$pw)) {
  echo "Korrekt";
} else {
  echo "Forkert";
}
Avatar billede jl4511 Nybegynder
06. januar 2007 - 15:43 #18
Samme resultat (igen med \ foran ?)
Avatar billede kalp Novice
06. januar 2007 - 15:52 #19
^(?=.*\d).{7,}.([a-zA-Z0-9])$
Avatar billede kalp Novice
06. januar 2007 - 15:57 #20
beklager.. tror vi skal helt hertil

^(?=.*\d).{6,}.([a-zA-Z0-9])$

nu håber jeg den virker.. for er opgivende;o)
Avatar billede jl4511 Nybegynder
06. januar 2007 - 16:03 #21
Password: abc123ABC
pattern: ^(\?=.*\d).{6,}.([a-zA-Z0-9])$
Forkert

Hvad med {6,}? - er det ikke min. længden? (som jo skal være 8)

Hvad tester du i? for i php virker det ikke.
Jeg har ingen anelse om hvad min \ foran ? afstedkommer, udover at jeg undgår den der Warning!
Avatar billede kalp Novice
06. januar 2007 - 16:05 #22
^(?=.*\d).{6,}.([a-zA-Z0-9])$

virker fint..

^(\?=.*\d).{6,}.([a-zA-Z0-9])$


gør ikke.. så de må betyder at du ændre pattern i den..

test selv her

http://regexlib.com/RETester.aspx
Avatar billede kalp Novice
06. januar 2007 - 16:07 #23
^(?\=.*\d).{6,}.([a-zA-Z0-9])$

ville være grimt hvis den forstår den sådan her
Avatar billede jl4511 Nybegynder
06. januar 2007 - 16:13 #24
Det gør den så heldigvis heller ikke :o)

Prøvede at teste på dit link med denne:
abc123ABC
^(?=.*\d).{6,}.([a-zA-Z0-9])$

Under results skriver den Match: abc123ABC og $1: C
Jeg kan ikke udlede af det, at den virker?
Avatar billede kalp Novice
06. januar 2007 - 16:14 #25
eregi('\?',^(?=.*\d).{6,}.([a-zA-Z0-9])$)

kan du få dit php til at være sådan her?
Avatar billede kalp Novice
06. januar 2007 - 16:17 #26
den virker vil jeg mene.. har testet med mange forskellige kombinationer nu.. men få det til at virke på din php side og test det der;)

og så skulle den jo også give match ved abc123ABC
så det er fint.
Avatar billede jl4511 Nybegynder
06. januar 2007 - 16:20 #27
Password: abc123ABC
pattern: '\?',^(?=.*\d).{6,}.([a-zA-Z0-9])$
Den giver også en warning!

Det link du henviser til benytter .NET Regex engine - der er nok forskel på den og PHP's !?
Avatar billede kalp Novice
06. januar 2007 - 16:29 #28
jeg tror du misforstår noget;)
regexp er regexp.. men selvfølgelig skal det sættes op rigtigt i det sprog man kigger på..

den her virker uanset hvor den køres
^(?=.*\d).{6,}.([a-zA-Z0-9])$

men du skal have php til at læse alle tegnene som en string og ikke funktioner..
præcis som i SQL..

hvis du vil skrive tegnet " eller ' tegnet i SQL skal du jo fortælle den at den skal læse det som en streng.

I ASP.NET løser jeg problemer sådan her

string regexp = @^(?=.*\d).{6,}.([a-zA-Z0-9])$


altså med et @ foran..  i PHP ved jeg ikke hvordan man gør...
men det er også RegEXP katagorien vi er i:P
Avatar billede minijensen1 Nybegynder
06. januar 2007 - 16:35 #29
i PHP skrives det som
$pattern = "^(?=.*\\d).{6,}.([a-zA-Z0-9])$";

tegnet "\" escaper det efterfølgende tegn, og derfor skal tegnet selv escapes, hvis man ønsker at bruge det "normalt" ;)
Avatar billede plx Nybegynder
06. januar 2007 - 16:39 #30
$pattern = "/(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/";

if(preg_match($pattern, $pw)){
Avatar billede jl4511 Nybegynder
06. januar 2007 - 16:54 #31
BINGO - der var den!
plx, lægger du et svar :o)
Avatar billede jl4511 Nybegynder
14. januar 2007 - 12:16 #32
Nå, jeg skal jo af med de point, så hvis plx ikke vil have dem må du få dem kalp.
Avatar billede kalp Novice
14. januar 2007 - 12:30 #33
Det tror jeg ikke du skal regne med.

refs.
http://www.eksperten.dk/spm/738306
http://www.eksperten.dk/spm/740049
http://www.eksperten.dk/spm/731811

men da jeg ikke gav dig en løsning kan du lovligt nok selv lægge et svar og tage dine point tilbage.
Avatar billede jl4511 Nybegynder
14. januar 2007 - 15:41 #34
Ok - så lad os slå halv skade... du gjorde et ihærdigt forsøg og jeg kan ikke afvise at du havde fat i noget. Det virkede bare ikke rigtig for mig :o)
Lægger du "et halvt" svar, kalp?
Avatar billede kalp Novice
14. januar 2007 - 15:53 #35
fair nok hehe:)
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