Avatar billede hlt Mester
04. juni 2008 - 00:21 Der er 8 kommentarer og
1 løsning

Ikke alphanumerisk tegn

Hej
er der nogen der kan hjælpe mig med at generere en regexp hvor man minimum skal have 8 tegn. Af disse 8 tegn, skal der minimum være 7 bogstaver fra a-z eller tal fra 0-9. derudover skal der minimum være 1 ikke alphanumerisk tegn. Og det behøver ikke være i en speciel rækkefølge. Jeg har fundet ud af at bruge denne del af valideringen:^[\w]{8,} Den virker sådan set fint, men jeg kan ikke få det til at virke med ikke alphanumerisk tegn.
På forhånd tak
Avatar billede roenving Novice
04. juni 2008 - 00:43 #1
Hrm, du bliver nok nødt til at lave det i to hug, hvilket programmeringssprog bruger du ?-)
Avatar billede nielle Nybegynder
04. juni 2008 - 06:33 #2
Noget i denne stil?

^(?=.*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9])(?=.*?[^a-z0-9]).*$

"smukt" ikke?
Avatar billede hlt Mester
04. juni 2008 - 09:29 #3
He he, jo meget smukt. Men hvis det virker så er det vel sådan det er. Og det skal bruges i asp.net. Problemet er egentligt, at jeg har sat en createuser funktion op, som virkede fint med hensyn til at validere om der blev indtastet det korrekte som password. Men så lavede jeg en ny side hvor brugeren også skulle indtaste andre ting så som adresse, postnr osv. Og pludselig fik man ikke besked om hvorvidt passwordet var stærkt nok. Siden blev bare genindlæst uden nogen besked. Jeg har prøvet at finde ud af hvorfor, men kan ikke umiddelbart finde en løsning på det andet end at jeg så har sat en
Avatar billede hlt Mester
04. juni 2008 - 09:31 #4
Ups.Her er fortsættelsen.
RegularExpressionValidator op som så skulle stå for valideringen af det indtastede. Og her er det så at ovenstående sætning kommer ind i billedet. Men den sætning der er lavet her, tager den højde for at man minimum skal taste 8 cifre ind, men sagtens kan taste flere ind?
Avatar billede nielle Nybegynder
04. juni 2008 - 15:31 #5
Ja det gøre den.
Avatar billede hlt Mester
05. juni 2008 - 09:24 #6
takker, for kodestumpen. Smider du et svar, så jeg kan give point.
Avatar billede nielle Nybegynder
05. juni 2008 - 10:12 #7
Vil du vide hvordan den virker?
Avatar billede hlt Mester
05. juni 2008 - 13:01 #8
ja tak, meget gerne.
Avatar billede nielle Nybegynder
06. juni 2008 - 09:07 #9
Jeg skal forsøge. :^)

Løsningen er bygget over denne her skabelon:

^(?=.*?regex1)(?=.*?regex2)(?=.*?regex3)(?=.*regex4)(?=.*regex5).*$

I dette tilfælde indgår der kun to under-regexp'er:

^(?=.*?regex1)(?=.*?regex2).*$

Altså:

regex1 = [a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9]
regex2 = [^a-z0-9]

- hvilket til sammen giver:

^(?=.*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9])(?=.*?[^a-z0-9]).*$

Opskriften:

^(?=.*?regex1)(?=.*?regex2)(?=.*?regex3)(?=.*regex4)(?=.*regex5).*$

- bruges til at tjekke et udtryk som skal opfylde (matche) hver af betingelserne regex1, regex2, regex3, regex4, regex5, regex6 osv.

Det bliver lidt for meget at forklare grundreglen her, men du kan i stedet læse mine artikler om emnet her på Eksperten. Grundreglene bliver forklarte i den sidste artikel, men der er nok en giod ide at læse de andre først:

http://www.eksperten.dk/artikler/1156
http://www.eksperten.dk/artikler/1157
http://www.eksperten.dk/artikler/1160
http://www.eksperten.dk/artikler/1162

I stedet vil jeg forklare de to under-regler:

regex1 = [a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9].*?[a-z0-9]
regex2 = [^a-z0-9]

Du foreslog selv:

^[\w]{8,}

Men dels tillader den faktisk også tegn som ’_’, og har desuden den svaghed at alle tegnene skal står som naboer til hinanden – de kan ikke være adskilt af et tegn som er ”noget andet”.

[a-z0-9] matcher et tegn som er a-z eller 0-9. Der er 7 af dem i regex1 ovenfor. Dette sikre at der mindst er 7 sådanne tegn. Indimellem er der så nogle led, ”.*?”, som kan matche noget vilkårligt. Det er dem som sikre at regex1 også fungere uden at tegnene skal være naboer.

Regex2, [^a-z0-9], matcher et tegn som ikke er et af tegnene a-z eller 0-9. Dette er altså et ikke-alphanumerisk tegn. Regex2 sikre altså at der er minimum 1 sådant tegn. Hvis du vil være mere specifik omkring hvilke tegn du tillader som ikke-alphanumerisk tegn så er det dette led du skal tilrette.

Håber at det kastede lidt lys over det?
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