Avatar billede azzodiac Nybegynder
01. september 2003 - 21:27 Der er 11 kommentarer og
2 løsninger

Sorter ugyldige tegn fra

Hejsa.
Jeg har en variabel. Den må kun indeholde

engelske bogstaver, tal, bindestreg, komma, punktum, spørgsmåltegn og skråstreg.

Nogen som har noget kode, som kan checke det?

120 point på bordet for hurtigt svar.
På forhånd tak.
Avatar billede nmh Nybegynder
01. september 2003 - 21:43 #1
Nedenstående funktion returnerer false, hvis der er fejl.
Den returnerer true, hvis tekststrengen s er ok.
function f(s)
  dim i
  const tegn="abcdefghijklmnopqrstuvwxyz0123456789,-./?"
  for i=1 to len(s)
    if InStr(tegn,Mid(s,i,1)= 0 then
      f=false
      exit function
    end if
  next
  f=true
end function
Avatar billede netro Nybegynder
01. september 2003 - 21:44 #2
Du kan bruge RegExp...

Function Tjek(Streng)
    Dim myReg
    Set myReg = New RegExp
    myReg.IgnoreCase = True
    myReg.Pattern = "^[a-z0-9\-\,\.\?\/]{1,}$"
    Tjek = myReg.Test(Streng)
End Function

If Tjek(Streng) Then
  'Gyldig!
End If
Avatar billede nmh Nybegynder
01. september 2003 - 21:44 #3
rettelse: Der mangler en parentes i if InStr(tegn,Mid(s,i,1)= 0 then
skal være:
if InStr(tegn,Mid(s,i,1))= 0 then
Avatar billede nmh Nybegynder
01. september 2003 - 21:46 #4
det skulle have været et svar
Avatar billede nmh Nybegynder
01. september 2003 - 21:48 #5
fortsat forbedring:
function f(s)
  dim i,t
  t=Lcase(s)
  const tegn="abcdefghijklmnopqrstuvwxyz0123456789,-./\?"
  for i=1 to len(t)
    if InStr(tegn,Mid(t,i,1)= 0 then
      f=false
      exit function
    end if
  next
  f=true
end function
Avatar billede netro Nybegynder
01. september 2003 - 22:35 #6
Vælger du altid den næstbedste løsning? Hmm... Men tak for points.
Avatar billede azzodiac Nybegynder
01. september 2003 - 22:42 #7
Hvorfor er din løsning bedre?
Avatar billede netro Nybegynder
01. september 2003 - 22:46 #8
Den er hurtigere og mere fleksibel. Regular Expressions er designet netop til bl.a. at udføre den slags validering, således at det ikke er nødvendigt at køre løkker og kalde funktioner (som InStr) en helvedes masse gange.

Det var sådan set heller ikke for at nedgøre hverken nmh's løsning eller dit valg. Jeg savnede bare en begrundelse for, at dit valg faldt på den.
Avatar billede nmh Nybegynder
01. september 2003 - 22:57 #9
Jeg takker for point.
Avatar billede azzodiac Nybegynder
01. september 2003 - 23:03 #10
Det var fordi den anden løsning kom først. :-)
Hvis min applikation bliver for tung, skifter jeg til din løsning.
Avatar billede netro Nybegynder
01. september 2003 - 23:07 #11
Ja, det må du jo helt selv om. Jeg ville bare ikke lade det være unævnt.
Avatar billede nmh Nybegynder
01. september 2003 - 23:38 #12
RegExp eller ej.
Det er da rigtigt at det er mere effektivt at bruge RegExp. Men i dette tilfælde er det vist hip som hap, med mindre du har rigtig mange lange tekststrenge, du skal håndtere. (Funktionen InStr er faktisk ret effektiv).
Avatar billede netro Nybegynder
04. september 2003 - 02:45 #13
Jeg ser blot ingen grund til IKKE at bruge RegExp.
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