Avatar billede skildpadden Nybegynder
25. juli 2006 - 13:55 Der er 7 kommentarer og
1 løsning

Tjek om streng indeholder andet end bogstaver og tal

Jeg mangler et script som tjekker en streng. Strengen må kun indeholde bogstaverne a til z, bindestreg (-), underscore (_) og tal.

Er der en venlig sjæl der kan hjælpe mig med dette?
Avatar billede fennec Nybegynder
25. juli 2006 - 14:12 #1
function tjekText(fText)
dim RX
  Set RX = New RegExp
  RX.Global = True
  RX.IgnoreCase = True
  RX.Pattern = "[^\w-]"
  tjekText = not RX.test(fText&"")
end function

returnere true hvis strengen er OK.
Avatar billede skildpadden Nybegynder
25. juli 2006 - 16:51 #2
fennec: Tak for dit svar. Vil du forklare mig hvad de enkelte linier gør?
Avatar billede mortvader Nybegynder
25. juli 2006 - 18:24 #3
den skal jeg også lige høre.. :)
Avatar billede nielle Nybegynder
25. juli 2006 - 21:43 #4
Vi kan jo starte med at koge den ned til det nødvendige:


Function tjekText(fText)
    Dim RX
    Set RX = New RegExp
    RX.Pattern = "[^\w-]"
    tjekText = Not RX.Test(fText & "")
End Function


Der er tale om et regulært udtryk. Den vigtigste del er selve "mønsteret":

    RX.Pattern = "[^\w-]"

\w - betyder "et bogstav (a-z), et ciffer (0-9), eller en understreg". En anden måde man kunne skrive det samme på er "a-z0-9_", men så er det altså noget nemmere at nøjes med \w.

Dernæst er der []-parenteserne. De skal læse som "eller":

[\w-] - betyder derfor "et bogstav (a-z eller A-Z), et ciffer (0-9), eller en understreg" ELLER "en bindestreg".

Hvis man sætter en caret, ^-tegnet, ind i sterten betyder det imidlertid "hverken eller":

[^\w-] - betyder "hverken et bogstav, et ciffer, en understreg, eller en bindestreg". Eller man kunne også læse det som "et eller andet tegn som ikke er: et bogstav, et ciffer, en understreg, eller en bindestreg".


Når vi har disse to linjer:


    RX.Pattern = "[^\w-]"
    tjekText = Not RX.Test(fText & "")

Så tjekker de altså indholdet af fTekst for om der er et tegn som opfylder at det "hverken er et bogstav, et ciffer, en understreg, eller en bindestreg", altså om der er et ulovligt tegn i teksten. Hvis der er det, så giver:

    RX.Test(fText & "")

værdien True, og Not foran betyder altså at du for False hvis der er bare et eneste et ulovlogt tegn.


Læg mærke til at jeg har skrevet "a-z" sammen med at jeg har skrevet "et bogstav". Hvad så med de danske bogstaver? Se, det afhænger af om ASP-instalationen ved at den er "dansk". Måske virker det bare, men for at være på den helt sikre side kan du også modifisere til:


Function tjekText(fText)
    Dim RX
    Set RX = New RegExp
    RX.Pattern = "[^\wæøåÆØÅ-]"
    tjekText = Not RX.Test(fText & "")
End Function
Avatar billede fennec Nybegynder
26. juli 2006 - 09:55 #5
Nille >>
Du har selvfølgelig ret i at Global og IgnoreCase ikke behøver at være med. Det er bare en vane jeg har, at de altid kommer med :o)

skildpadden >>
Regular Expression er en af de mest kraftfulde værktøjer, der findes inden for programmering, og derfor er det implementeret i mange forskellige programmeringssprog. Hele styrken ligger i de "patterns" man kan opbygge, men for nybegyndere er syntaxen mildesttalt uforstålig.

Jeg vil anbefale dig at smutte forbi RegExp kategorien her på E engang når du har tid. Der kan finde alle mulige gode scripts:
http://www.eksperten.dk/spm/Programmering/RegExp/

F.eks script til at validere emailadresser og udskifte links i tekst/noter til klikbare links (lige som der sker her på E hvis du indtaster en www adresse). Der kan du selvfølgelig også finde guides til at lære RegExp.

.o) <-- One Eyed Jack
Avatar billede skildpadden Nybegynder
30. juli 2006 - 20:37 #6
Det er bare super! Mange tak for hjælpen - begge to.

Jeg er nu et lille dilemma; fennec kom med svaret, men nielle forklarede mig hvordan det hele fungerede - hvordan skal point gives?
Avatar billede nielle Nybegynder
30. juli 2006 - 20:41 #7
Det er normalt den som stiller spørgsmålet som bestemmer den slags ting.

Jeg svarede nu ikke for at stjæle points fra fennec; Afstår gerne :^)
Avatar billede skildpadden Nybegynder
30. juli 2006 - 22:20 #8
Så finder vi jo ud af det alligevel... ville bare ikke have at du følte dig snydt for du hjalp virkelig også meget, og det skal du have mange tak for.
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