Avatar billede Six Nybegynder
25. september 2007 - 17:48 Der er 21 kommentarer og
1 løsning

Reg.exp: Valider brugernavn

Hej eksperter.

Regular expressions.. tja, jeg fatter dem ikke - men har luret lidt på et tutorial... min reg.exp erfaring er cut'n'paste, og så ellers prøve mig frem (medmindre jeg tyr til eksperten ;))

Hvis jeg vil have valideret et brugernavn på den mest optimale måde, hvordan skal reg.exp så se ud?

Jeg har pt fået prøvet mig frem til det her:

\b[+a-zA-ZæøåÆØÅ0-9+]{3,15}\b

og den virker som sådan fint nok.. - men er det, det mest optimale? kunne det gøres nemmere eller smartere?

PS: links til tutorials, guider og referencer er værdsat ! :)
Avatar billede olebole Juniormester
25. september 2007 - 18:02 #1
<ole>

Det kommer jo helt anpå dine regler for et brugernavn. Hvad er et brugernavn - og hvordan ser det ud ... hvad kan det indeholde?

/mvh
</bole>
Avatar billede nielle Nybegynder
25. september 2007 - 18:28 #2
Det er i hvert fald klart at den beskrevne regexp ikke er god nok - en mere korrekr en er:

^[a-zA-ZæøåÆØÅ0-9+]{3,15}$

Det siger jeg alene ud fra det faktum at den vise kun ville teste på et af flere ord i et eventuelt "brugernavn". F.eks. ville den sige ok til:

"# abc %%%%%%%%%%%%%%%%%%%"

fordi at den kun ville tjekke på "abc".

Ud over dette, så er det som ole siger meget afhængig af hvad dine kriterier for lovlighed eller er.
Avatar billede Six Nybegynder
26. september 2007 - 01:47 #3
Ja ok - det kan jeg godt se.

Hvis jeg så prøver at skrive nogle regler for hvordan mit brugernavn må være:

1.Skal indeholde tal eller bogstaver
2.Minimum 3 karakterer og maksimum 15(jeg ved ikke helt hvad man normalt sætter det til)
3.Må ikke indeholde mellemrum
4.Må ikke indeholde specielle tegn
5.Danske karakterer må bruges

Er det ikke en meget normal beskrivelse af et brugernavn ?
Avatar billede olebole Juniormester
26. september 2007 - 01:56 #4
- så passer nielles fint til dine kriterier. Personligt ville jeg nok vælge i-modifier'en, men det er en smagssag  ;o)
    /^[a-zæøå0-9+]{3,15}$/i
Avatar billede Six Nybegynder
26. september 2007 - 01:56 #5
hvad gør i-modifieren ? ;D
Avatar billede Six Nybegynder
26. september 2007 - 02:00 #6
Den gør det case-sensitive simpelthen.. og derfor behøver man ikke skrive a-zA-Z ? - er det korrekt forstået ? ;D
Avatar billede nielle Nybegynder
26. september 2007 - 06:46 #7
'i' står for "ignore case" - ja, du har helt ret :^)
Avatar billede nielle Nybegynder
26. september 2007 - 09:47 #8
Lige nu tillader den også at tegnet '+' bruges ... og det skal det vel ikke:

/^[a-zæøå0-9]{3,15}$/i
Avatar billede Six Nybegynder
27. september 2007 - 01:03 #9
Spørgsmål: - hvorfor tillader den + tegnet? det forstår jeg ikke helt. Skal + tegnet ikke escapes før det betragtes som en karakter?

Hvorfor smider i ^ og $ på ? gælder ^ ikke kun for den første karakter der bliver matchet ? f.eks. i fjappe tæller ^ for f og $ for e ? eller har jeg fuldstændig misforstået der ? ;D
Avatar billede olebole Juniormester
27. september 2007 - 01:12 #10
^ betyder 'start af input-streng' - og $ betyder 'slut på input-streng'. Når du omkranser mønstret med de to, kan der ikke være andet i strengen end det, der står i mønstret, for at opfylde et match.

/^[a-zæøå0-9]{3,15}$/i

- kan ikke matche "&% OleBole %%&///#¤!"

- det kan:

/[a-zæøå0-9]{3,15}/i

Den sidste tjekker bare, om strengen indeholder 3-15 tegn i træk, der opfylder kravene ... plus måske noget mere før og/eller efter  ;o)
Avatar billede olebole Juniormester
27. september 2007 - 01:13 #11
- og det er ikke 'f' og 'e' i 'fjappe'. Det er 'grænsen' til venstre for 'f' og 'grænsen' til højre for 'e'.

... måske nielle har bedre mennskeord for det  :D
Avatar billede olebole Juniormester
27. september 2007 - 01:37 #12
- og nu, kaffen er skænket, så lad os lige tage plusset. Visse tegn behandles/fortolkes forskelligt alt efter, hvor de står - herunder +.

1) /[abc]+/ - matcher et eller flere på hinanden følgende a, b eller c tegn.

2) /[abc+]+/ - matcher et eller flere på hinanden følgende a, b, c eller + tegn.

3) /[a-c]+/ - svarer til #1

4) /[a-c-]+/ - matcher et eller flere på hinanden følgende a, b, c eller - tegn.
Avatar billede olebole Juniormester
27. september 2007 - 01:39 #13
- og nej, de skal ikke escapes, når de står anført i et 'span' af tegn - minus _altid_ til sidst, da det ellers kan mistolkes  ;o)
Avatar billede olebole Juniormester
27. september 2007 - 01:40 #14
'minus' eller 'bindestreg'  :)
Avatar billede Six Nybegynder
27. september 2007 - 02:07 #15
Der var da lidt forklaring på hvordan det hænger sammen :D

Dog forstår jeg ikke hvorfor "&% OleBole %%&///#¤!" vil give et match, da det jo ikke er tilladte tegn i min reg.exp ? Det er så fordi at der alligevel er et match inde i strengen?

Takker for forklaringerne :)
Avatar billede olebole Juniormester
27. september 2007 - 03:19 #16
Dette udtryk:
    /[a-zæøå0-9]{3,15}/i

- tjekker, om der et eller andet sted i strengen står 3-15 bogstaver og/eller tal efter hinanden. Den accepterer også, der står andet - både før og efter. Derfor vil strengen:
    "&% OleBole %%&///#¤!"

- matche. Delstrengen "OleBole" opfylder '3-15 bogstaver og/eller tal efter hinanden'. Det er nok.

Dette udtryk:
    /^[a-zæøå0-9]{3,15}$/i

- tjekker, at der ikke står andet i strengen end 3-15 bogstaver og/eller tal efter hinanden. Her vil strengen ikke matche, da der står noget andet før og efter delstrengen "OleBole".

Det er dét, de to tegn ^ og $ i enderne af mønstret gør  ;o)
Avatar billede olebole Juniormester
27. september 2007 - 03:23 #17
Dette udtryk:
    /^[a-zæøå0-9]{3,15}/i

- vil matche:
    "OleBole %%&///#¤!"

- men ikke:
        "&% OleBole"

- og omvendt med $. Håber, det hjalp på forståelsen  :)
Avatar billede Six Nybegynder
27. september 2007 - 04:06 #18
Det gjorde det helt sikkert - det var skåret ud i pap, så selv jeg endelig fangede den ;)

I må meget gerne smide et par svar til mig og tak for hjælpen :)
Avatar billede nielle Nybegynder
27. september 2007 - 16:41 #19
27/09-2007 01:13:46> 27/09-2007 01:13:46

Om det er bedre, vil jeg lade være op til jer at vurdere... :^)

Men jeg ville sige at ^ matcher strengens start (ikke det første tegn, men sleve starten) og at $ matcher strenges slutning. Tilsammen kaldes ^ og $ for "ankre".
Avatar billede Six Nybegynder
30. september 2007 - 18:20 #20
Olebole - jeg går ud fra du springer over point i denne omgang :) - ellers siger du til, så får du som fortjent :)
Avatar billede Six Nybegynder
30. september 2007 - 18:20 #21
Og mange tak for hjælpen til jer begge :)
Avatar billede nielle Nybegynder
30. september 2007 - 18:36 #22
Tak for point :^)
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